0

我有一个实现服务合同的类。从这个类派生的另一个类又实现了另一个服务契约

Class A: a.IA
{

}

Class B: A, b.IB
{

}

如何公开合约 IB 的端点?

我尝试的端点:

<service name="B">
   <endpoint address="ep1" binding="webHttpBinding" contract="a.A1" />   
   <endpoint address="ep2" binding="webHttpBinding" contract="b.B1" />
</service>

如果我这样做,它会给出错误

服务“B”实现了多种 ServiceContract 类型,并且在配置文件中没有定义端点。WebServiceHost 可以设置默认端点,但前提是服务仅实现单个 ServiceContract。要么将服务更改为仅实现单个 ServiceContract,要么在配置文件中明确定义服务的端点。

提前致谢。

编辑

配置上面有错字。

    <service name="B">
       <endpoint address="ep1" binding="webHttpBinding" contract="a.IA" />   
       <endpoint address="ep2" binding="webHttpBinding" contract="b.IB" />
    </service>

我为此使用的模板是 WCF Rest 模板 4.0(如果有什么不同的话)

4

1 回答 1

0

实现该服务的服务类是B- 据我所知,您正确使用它。

该服务类实现的合同是IB- 但这并没有真正显示在您的配置中。

尝试这个:

<service name="B">
   <endpoint address="ep1" binding="webHttpBinding" contract="a.IA" />   
   <endpoint address="ep2" binding="webHttpBinding" contract="b.IB" />
</service>

端点中的契约必须表示定义服务方法的服务接口(通常) - 该接口必须具有[ServiceContract]应用于它的属性。

好的 - 这是一个错字,你的合同是正确的 - 但我的问题是:合同上的a.b.前缀是这些合同所在的命名空间吗?

如果是的话:为什么服务标签也不使用该命名空间?如果您将其更改为name="b.B"

<service name="b.B">
   <endpoint address="ep1" binding="webHttpBinding" contract="a.IA" />   
   <endpoint address="ep2" binding="webHttpBinding" contract="b.IB" />
</service>
于 2011-09-09T21:46:46.330 回答