检查WCF服务是否正在运行的最快方法

时间:2013-08-02 15:18:08

标签: c# wcf tcp port

我在本地运行WCF服务。该服务有一个运行的默认端口,但如果该端口已经在使用,那么我会动态分配该端口。

我在主机中添加了这个以使其可被发现:

serviceHost.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
serviceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());

现在我的客户端需要连接到这台主机。在客户端我想让它首先尝试默认端口,如果它无法连接到默认端口上的服务,那么它将进行发现。

我发现这个发现需要大约20-30秒,所以我宁愿避免一直这样做,只有当它无法在默认端口找到主机时才会发现。

所以我的问题是:确定我的主机是否在默认端口上的最快方法是什么?

我正在考虑做一些事情,例如将客户端上的打开超时设置为10秒,然后在打开时执行try / catch,但仍需要等待10秒。

2 个答案:

答案 0 :(得分:5)

因此,如果您的端点不正确,调用client.Open();将不会抛出任何异常。

我在我的服务中添加了一个名为IsAlive()的方法,它只返回true。所以我打开后调用client.IsAlive();,如果端点不正确,几乎会立即出现异常。

答案 1 :(得分:4)

您实际上只需导航到浏览器中的URL,该网址应显示Web服务是否正在运行。所以,如果WCF网址是

http://YourService:8000/YourClass/YourMethod

,如果服务正在运行,浏览器地址栏中的输入应显示WSDL页面,否则显示404错误。

我的WCF服务是自托管的,所以我也会添加,当我的WCF服务启动时,我使用这行代码将DOS服务器的当前URL输出到DOS窗口:

Console.WriteLine("HostInterface running on http://" & Domain & ":" & Port & "/Service/Endpoint" )