How do I get the local port my WCF service runs on

2019-05-29 02:46发布

问题:

I'm using multiple self-hosted WCF services on the same machine. I need to open each of them on a different port (obviously), so I used "net:tcp://localhost:0" as address since I figured it would assign a free port this way.

Now I need to know which port was assigned actually. This code runs on the server, so I need the local port. How do I do that?

回答1:

You can use OperationContext.Channel.LocalAddress.Uri.Port to know the port used in the call to a service



回答2:

Then you need another place to store all service's ports to read them from outside the server. If it's another service, then it needs a constant port. It also can be a xml file over http or something modified on each of service's startup.

More on WCF Discovery



回答3:

Found something that works, even though it is a bit dirty. Instead of automatically assigning a port, a free port is explicitly requested and used to create the service:

Address = "net.tcp://localhost:" + FindFreeTcpPort ();

private static int FindFreeTcpPort ()
{
    TcpListener l = new TcpListener (IPAddress.Parse ("127.0.0.1"), 0);
    l.Start ();
    int port = ((IPEndPoint) l.LocalEndpoint).Port;
    l.Stop ();
    return port;
}

(the method code is from here)



标签: .net wcf port