2010-02-05 116 views
1

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

感谢, 阿德里安娜

+0

您是否找到答案? – 2015-02-12 20:30:07

回答

7

您可以从服务实现中卸除实际的“监听器”后,ServiceHost的是开放的,使用“ChannelDispatcher”属性。

例如:

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

听众的URI将包含TCP/IP端口的服务listenting上。请注意,这当然只适用于基于TCP/IP的这种绑定。还要注意,显然每个服务可能有多个监听器(或监听端口),因此“ChannelDispatchers”属性可能会返回多个监听器。

您可能还需要查看/转储“状态”属性的值,以确保相应的通道调度程序实际为“打开”,即正在收听。

编辑:你可能也想看看enabling WMI for WCF。虽然我从来没有看过它,但它也可能揭示这些信息。

如果你不能修改服务的代码或不想,你需要使用诸如“Process Explorer”或“netstat”之类的工具(后来再次假设你正在使用一些基于TCP/IP的绑定该服务的端点)。使用netstat的“-b”选项来显示每个端口的PID和可执行文件名称。这会给你一个暗示你的服务(可执行文件)。

+0

为什么不接受? – mafu 2012-04-18 11:11:09

相关问题