我在客户端和服务器都是 Windows 窗体的解决方案上使用 WCF 和 NetTcpBinding。该服务由其中之一托管。我正在使用 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 时,它会生成一个异常,表明它找不到带有合同“IServiceB”的“betaEP” ' 即使 app.config 具有相同的绑定配置并且定义了两个端点
<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根据服务器配置生成的,为什么找不到端点?
为什么它会生成两个客户端类而不是一个?那会是问题的根源吗?我有多个相关服务要公开,我不想占用一个以上的端口。请注意,这是网络 TCP 绑定。