Question

I have 2 WCF services each hosted in its own console app.

they are hosted at:

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

each has its own contract. i want them to use the same port, so i read a lot on the subject, and did the following:

  1. Enabled the net tcp port sharing service.
  2. Registered the url`s using the commands:

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. enabled the PortSharingEnabled=true on the bindings in for each WCF service
  2. hosted each one in it`s own console app.

if i start both console apps, the second one always gives this exception on the call to the host's Open() method:

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

when i host them both in the same console app, it all works just fine.

my question is: how to get it working when each service is hosted in it's own console app.

Was it helpful?

Solution

As Jon_Lindeheim and you stated, this should work fine. so i recreated everything from scratch as follows:

I have two WCF services that had the same base address and a different relative URI
i.e. for service 1:

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

and for service 2:

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

I was not aware that base addresses must be different not just the eventual absolute URI.

so the following works fine: for service 1:

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

for service 2:

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

(why the first erroneous way still works when all is in one process, i think it's related to the way port sharing routes the traffic on a process based way).

Thanks again

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top