Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fastest way to check if WCF endpoint is listening

Tags:

c#

wcf

Often, if a WCF endpoint is unavailable (in my case, usually because the service host is not running), I'll get an EndpointNotFoundException after a timeout. I'd like to have a fast way to query the service to see if it's available without having to rely on the normal timeout. In other words, I want to keep a normal timeout for normal circumstances, but for a quick "ping" of the endpoint, I want it to fail fast if it's not available right away.

How could this be accomplished?

like image 462
Larsenal Avatar asked Jul 06 '11 05:07

Larsenal


2 Answers

You will have to wait for a TimeOut exception. You can set (override) the TimeOut when creating the Proxy object. They're cheap so make a temp proxy for the Ping.

On the server side, you could make sure there is a lightweight function to call (like GetVersion).

like image 86
Henk Holterman Avatar answered Nov 08 '22 06:11

Henk Holterman


To check availability, you can try connecting to host thru Socket Connection like this (its vb.net 2.0 code should work in WCF too)

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

It will give you Server status in 1/2 second

like image 4
Rajeev Avatar answered Nov 08 '22 06:11

Rajeev