class实现另一个类WCF的服务契约基类

时间:2011-09-09 21:38:26

标签: wcf endpoint servicecontract

我有一个实现服务合同的类。另一个类派生自此类,然后实现另一个服务契约

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可以   设置默认端点,但仅当服务仅实现a时   单一ServiceContract。将服务更改为仅实现a   单个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(如果它有任何区别)

1 个答案:

答案 0 :(得分: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>