我在Windows服务注册表中有一个WCF服务侦听动态分配端口。 如何从另一个c#应用程序中找到此服务的侦听地址?或者至少是这项服务的端口?
谢谢, 阿德里安娜
答案 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和可执行文件名称。这将为您提供服务(可执行文件)的提示。