在单个服务中出现多个接口问题

时间:2013-01-19 15:41:14

标签: wcf service wcf-client nettcpbinding wcf-endpoint

我在一个解决方案中使用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绑定。

0 个答案:

没有答案