我在同一台机器上使用多个自托管WCF服务。我需要在不同的端口上打开它们(显然),所以我使用“net:tcp:// localhost:0”作为地址,因为我认为它会以这种方式分配一个空闲端口。
现在我需要知道实际分配了哪个端口。此代码在服务器上运行,因此我需要本地端口。我该怎么做?
答案 0 :(得分:2)
您可以使用OperationContext.Channel.LocalAddress.Uri.Port
来了解服务调用中使用的端口
答案 1 :(得分:0)
然后你需要另一个地方来存储所有服务的端口,以便从服务器外部读取它们。如果它是另一个服务,那么它需要一个恒定的端口。它也可以是通过http的xml文件或在每个服务启动时修改的内容。
更多关于WCF Discovery
答案 2 :(得分:0)
找到有效的东西,即使它有点脏。而不是自动分配端口,显式请求空闲端口并用于创建服务:
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;
}
(方法代码来自here)