如何获取WCF服务正在侦听的端口?

ngo*_*eff 7 c# service wcf

我有一个net.tcp WCF服务,我希望操作系统选择它应该监听的端口.所以我在我的URI中将端口设置为0,并netstat确认操作系统已经选择了5000范围内的端口.

如何在服务流程中找到代码中已选择的实际端口?

一些代码显示我尝试过的内容:

Type serviceType = ...;
Uri address = new Uri("net.tcp://0.0.0.0:0/Service/");
ServiceHost serviceHost = new ServiceHost(serviceType, address);
ServiceEndpoint endPoint = serviceHost.AddServiceEndpoint(type, binding, "");
int port1 = endPoint.ListenUri.Port; // returns 0
int port2 = serviceHost.BaseAddresses.First().Port; // also returns 0
Run Code Online (Sandbox Code Playgroud)

Dav*_*ter 10

不确定这是否会有所帮助,但是SO上已经存在类似的问题: 我如何获得WCF服务的侦听地址/端口?

您可能想要尝试的已提交答案的相关部分:

foreach (var channelDispatcher in serviceHost.ChannelDispatchers)
{
            Console.WriteLine(channelDispatcher.Listener.Uri);
}
Run Code Online (Sandbox Code Playgroud)

所以也许你需要channelDispatcher.Listener.Uri.Port.

希望这可以帮助!

  • @D Hoerster:看起来我们有一个胜利者.我还必须设置endPoint.ListenUriMode = ListenUriMode.Unique; 为此工作(并禁用绑定上的端口共享). (3认同)
  • @D Hoerster:不幸的是,这只是返回了我传入的 URI。感谢您指出另一个问题。 (2认同)