我有一个实现服务合同的类。另一个类派生自此类,然后实现另一个服务契约
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(如果它有任何区别)
答案 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>