WCF net tcp端口共享

时间:2014-05-14 11:33:51

标签: c# .net wcf tcp

我有2个WCF服务,每个服务都在自己的控制台应用程序中托管。

他们的主持人是:

net.tcp://computername:7777/Service1
net.tcp://computername:7777/Service2

每个人都有自己的合同。 我希望他们使用相同的端口,所以我在这个主题上阅读了很多内容,并做了以下几点:

  1. 启用net tcp端口共享服务。
  2. 使用以下命令注册了网址:
  3. netsh http add urlacl user=domain\username url=net.tcp://+:7777/Service1

    netsh http add urlacl user=domain\username url=net.tcp://+:7777/Service2

    1. 为每个WCF服务
    2. 启用了PortSharingEnabled=true绑定
    3. 将每个人托管在自己的控制台应用程序中。
    4. 如果我启动两个控制台应用程序,第二个应用程序总是在调用主机Open()方法时出现此异常:

          AddressAlreadyInUseException. The transport manager failed to listen on the supplied 
          URI using the NetTcpPortSharing service: the URI is already registered with the 
          service.
      

      当我在同一个控制台应用程序中托管它们时,一切正常。

      我的问题是:当每个服务都托管在自己的控制台应用中时,如何使其正常工作。

1 个答案:

答案 0 :(得分:2)

正如Jon_Lindeheim和你所说,这应该可行。所以我从头开始重新创建如下:

我有两个WCF服务具有相同的基址和不同的相对URI
即 服务1:

    <add baseAddress = "net.tcp://computername:7777/" />
    ...
    <endpoint address = "/service1" ... />

和服务2:

    <add baseAddress = "net.tcp://computername:7777/" />
    ...
    <endpoint address = "/service2" ... />  

我不知道基地址必须与最终的绝对URI不同。

所以以下工作正常: 服务1:

    <add baseAddress = "net.tcp://computername:7777/service1/" />
    ...
    <endpoint address = "/service1" ... />

服务2:

    <add baseAddress = "net.tcp://computername:7777/service2/" />
    ...
    <endpoint address = "/service2" ... />  

(为什么第一个错误的方式仍然有效,当所有进程都在一个进程中时,我认为这与端口共享在基于进程的路径上路由流量的方式有关。)

再次感谢