我在本地运行WCF服务。该服务有一个运行的默认端口,但如果该端口已经在使用,那么我会动态分配该端口。
我在主机中添加了这个以使其可被发现:
serviceHost.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
serviceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());
现在我的客户端需要连接到这台主机。在客户端我想让它首先尝试默认端口,如果它无法连接到默认端口上的服务,那么它将进行发现。
我发现这个发现需要大约20-30秒,所以我宁愿避免一直这样做,只有当它无法在默认端口找到主机时才会发现。
所以我的问题是:确定我的主机是否在默认端口上的最快方法是什么?
我正在考虑做一些事情,例如将客户端上的打开超时设置为10秒,然后在打开时执行try / catch,但仍需要等待10秒。
答案 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" )