6

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

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

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

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

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

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

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

4

2 回答 2

7

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

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

于 2013-08-02T18:02:31.567 回答
4

实际上,您可以在浏览器中导航到 URL,它应该会显示 Web 服务是否正在运行。所以如果 WCF url 是

http://YourService:8000/YourClass/YourMethod

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

我的 WCF 服务是自托管的,所以我还要补充一点,当我的 WCF 服务启动时,我使用这行代码将我的服务的当前 URL 输出到 DOS 窗口中:

Console.WriteLine("HostInterface running on http://" & Domain & ":" & Port & "/Service/Endpoint" )
于 2013-08-05T12:08:52.417 回答