Самый быстрый способ проверить, слушает ли конечная точка WCF - PullRequest
24 голосов
/ 06 июля 2011

Часто, если конечная точка WCF недоступна (в моем случае, обычно потому, что хост службы не запущен), я получаю исключение EndpointNotFoundException по истечении времени ожидания.Я хотел бы иметь быстрый способ запросить службу, чтобы увидеть, если она доступна, не полагаясь на обычное время ожидания.Другими словами, я хочу сохранить нормальный тайм-аут для обычных обстоятельств, но для быстрого «пинга» конечной точки я хочу, чтобы он быстро проваливался, если он не доступен сразу.

Как это можно сделать

Ответы [ 3 ]

9 голосов
/ 06 июля 2011

Вам придется ждать исключения TimeOut.Вы можете установить (переопределить) TimeOut при создании объекта Proxy.Они дешевые, поэтому создайте временный прокси для Ping.

На стороне сервера вы можете убедиться, что есть легкая функция для вызова (например, GetVersion).

4 голосов
/ 06 июля 2011

Чтобы проверить доступность, вы можете попробовать подключиться к хосту через Socket Connection вот так (его код 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 голосов
/ 12 января 2013

Это SendTimeout, который вы хотите изменить.В моем конкретном случае это служба оценки пакетов FedEx, которая, как представляется, всегда не работает в пятницу вечером.Вам, вероятно, придется тщательно обдумать значение тайм-аута в зависимости от того, насколько важны ложные отрицания (поэтому служба отключена).

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

Это значение будет влиять только на клиента WCF и не будет постоянно изменять время ожиданияза эту услугу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...