检查WCF端点是否正在侦听的最快方法

时间:2011-07-06 05:53:44

标签: c# wcf

通常,如果WCF端点不可用(在我的情况下,通常是因为服务主机没有运行),我会在超时后收到EndpointNotFoundException。我想有一个快速的方法来查询服务,看看它是否可用,而不必依赖正常的超时。换句话说,我希望在正常情况下保持正常超时,但是为了快速“ping”端点,我希望它在没有立即可用的情况下快速失败。

如何实现这一目标?

3 个答案:

答案 0 :(得分:9)

您必须等待TimeOut异常。您可以在创建Proxy对象时设置(覆盖)TimeOut。它们便宜,所以为Ping做一个临时代理。

在服务器端,您可以确保有一个轻量级函数可以调用(如GetVersion)。

答案 1 :(得分:4)

要检查可用性,您可以尝试通过套接字连接连接到主机 像这样(它的vb.net 2.0代码也应该在WCF中工作)

Dim sckTemp As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    sckTemp.ReceiveTimeout = 500 : sckTemp.SendTimeout = 500

    Try
        '' Connect using a timeout (1/2 second)
        Dim result As IAsyncResult = sckTemp.BeginConnect("Host_ADDRESS", YOUR_SERVER_PORT_HERE, Nothing, Nothing)
        Dim success As Boolean = result.AsyncWaitHandle.WaitOne(500, True)
        If (Not success) Then
            sckTemp.Close() : Return False
        Else
            Return True
        End If
    Catch ex As Exception
        Return False
    End Try

它会在1/2秒内为您提供服务器状态

答案 2 :(得分:2)

这是你要改变的SendTimeout。 在我的特殊情况下,这是一个联邦快递包裹评级服务,顺便说一下,似乎总是在周五晚上下来。您可能需要仔细考虑超时值,具体取决于漏报的重要程度(因此服务已关闭)。

rateService.Endpoint.Binding.SendTimeout = TimeSpan.FromSeconds(.5);

此值只会影响WCF客户端,并且不会永久更改该服务的超时。