如何获取WCF服务的侦听地址/端口?

时间:2010-02-05 13:07:39

标签: c# .net wcf

我在Windows服务注册表中有一个WCF服务侦听动态分配端口。 如何从另一个c#应用程序中找到此服务的侦听地址?或者至少是这项服务的端口?

谢谢, 阿德里安娜

1 个答案:

答案 0 :(得分:7)

您可以在ServiceHost打开后使用“ChannelDispatcher”属性从服务实现中转储实际的“监听器”。

例如:

foreach (var channelDispatcher in serviceHost.ChannelDispatchers)
{
            Console.WriteLine(channelDispatcher.Listener.Uri);
}

侦听器的URI将包含服务所在的TCP / IP端口。请注意,这当然仅适用于首先基于TCP / IP的此类绑定。另请注意,显然每个服务可能有多个侦听器(或侦听器端口),因此“ChannelDispatchers”属性可能会返回多个侦听器。

您可能还想查看/转储“State”属性的值,以确保相应的通道调度程序是“打开”,即监听。

编辑:您可能还想查看enabling WMI for WCF。虽然我从未研究过它,但它也可能会揭示这些信息。

如果您无法修改服务代码或不想修改服务代码,则需要使用“Process Explorer”或“netstat”之类的工具(后者再次假设您正在使用某些基于TCP / IP的绑定服务的端点)。使用netstat的“-b”选项显示每个端口的PID和可执行文件名称。这将为您提供服务(可执行文件)的提示。