我有2个WCF服务,每个服务都在自己的控制台应用程序中托管。
他们的主持人是:
net.tcp://computername:7777/Service1
net.tcp://computername:7777/Service2
每个人都有自己的合同。 我希望他们使用相同的端口,所以我在这个主题上阅读了很多内容,并做了以下几点:
netsh http add urlacl user=domain\username url=net.tcp://+:7777/Service1
netsh http add urlacl user=domain\username url=net.tcp://+:7777/Service2
PortSharingEnabled=true
绑定
如果我启动两个控制台应用程序,第二个应用程序总是在调用主机Open()
方法时出现此异常:
AddressAlreadyInUseException. The transport manager failed to listen on the supplied
URI using the NetTcpPortSharing service: the URI is already registered with the
service.
当我在同一个控制台应用程序中托管它们时,一切正常。
我的问题是:当每个服务都托管在自己的控制台应用中时,如何使其正常工作。
答案 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" ... />
(为什么第一个错误的方式仍然有效,当所有进程都在一个进程中时,我认为这与端口共享在基于进程的路径上路由流量的方式有关。)
再次感谢