0

我在客户端和服务器都是 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 绑定。

4

0 回答 0