我在一个解决方案中使用WCF和NetTcpBinding,其中客户端和服务器都是Windows窗体。该服务由其中一个托管。我正在使用VS.2012。
在服务器端,我有几个服务合同(相关),所有服务合同都在一个服务类中实现。像这样:
public class MyService : IServiceA, IServiceB
{
}
并且应该可以通过net.tcp:// localhost:4545 / control /访问它们,这将导致以下服务地址:
IServiceA (endpoint alphaEP) : net.tcp://localhost:4545/control/ASvc/
IServiceB (endpoint betaEP) : net.tcp://localhost:4545/control/BSvc/
当我使用svcutil.exe生成客户端的东西时,我发现它生成了两个服务客户端类,每个接口一个,所以当我使用ServiceBClient时它会产生一个异常,因为它无法找到'betaEP'即使app.config具有相同的绑定配置并且定义了两个端点,也会收缩'IServiceB'
<bindings>
<netTcpBinding>
<binding name="alphaEP">
<reliableSession enabled="true" />
<security mode="None" />
</binding>
<binding name="betaEP">
<reliableSession enabled="true" />
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
和这个
<client>
<endpoint address="net.tcp://localhost:4545/control/ASvc"
binding="netTcpBinding" bindingConfiguration="alphaEP"
contract="CodeDom.IServiceA" name="alphaEP">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="net.tcp://localhost:4545/control/BSvc"
binding="netTcpBinding" bindingConfiguration="betaEP" contract="CodeDom.IServiceB"
name="betaEP">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
如果此客户端app.config是由svcutil.exe根据服务器配置生成的,为什么找不到端点?
为什么它会生成两个客户端类而不是一个?那会是问题的根源吗?我有多个相关服务要公开,我不想占用多个端口。请注意,这是Net TCP绑定。