проверьте соединение клиента wcf - PullRequest
0 голосов
/ 03 марта 2011

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

@ marc_s: я создал метод CheckCallbackChannels, который будет проверять состояние связи подключенных клиентов всловарь.

Sub CheckCallbackChannel()
    For Each objClient As KeyValuePair(Of Guid, IClientCallBack) In MainService.objClients
        Dim objClientCallBack As IClientCallBack = MainService.objClients.Item(objClient.Key)
        Dim callbackChannel As ICommunicationObject = TryCast(mobjClientCallBack,ICommunicationObject)
        'Dim state As CommunicationState = callbackChannel.State
        If callbackChannel.State = CommunicationState.Opened OrElse callbackChannel.State = CommunicationState.Faulted Then
            MainService.objClients.Remove(objClient.Key)
        End If
    Next
End Sub

но здесь я получаю состояние как подключено для неисправных клиентов.

1 Ответ

2 голосов
/ 03 марта 2011

Да, вы можете включить Ping() метод в каждый контракт на обслуживание и вызывать его до фактического вызова.

Но что это на самом деле говорит вам?

Прежде всего, даже вызов .Ping() может привести к исключению (так как сервис пропал, перегружен и т. Д.).

И если это удастся - это абсолютно не дает вам гарантии того, что ваш следующий звонок в ту же службу через микросекунду будет иметь шанс на успех ...

По сути, я нахожу этот подход расточительным - вам нужно написать много кода, и в конце концов, он действительно не дает вам никакой значимой информации.

Что вам нужно сделать, так это: будьте готовы к каждому вызову службы, чтобы он мог потерпеть неудачу - по любой причине. Не тратьте впустую свое время и циклы обработки по всей вашей системе - в любом случае это не даст вам никакой значимой информации.

Просто позвоните в службу поддержки, будьте готовы обработать сбои (и, возможно, утилизировать прокси-серверы WCF) - и это все, что вы действительно можете сделать.

...