【问题标题】:Quickest way to check if WCF service is running检查 WCF 服务是否正在运行的最快方法
【发布时间】:2013-08-02 15:18:07
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: c# wcf tcp port


    【解决方案1】:

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

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

    【讨论】:

    • 是的,如果Server的endpoint不正确,会抛出异常。
    【解决方案2】:

    实际上,您可以在浏览器中导航到 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" )
    

    【讨论】:

    • 假设传输是http。
    猜你喜欢
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2021-08-15
    相关资源
    最近更新 更多