WCF net.tcp сервер отключается - как правильно обрабатывать на стороне клиента?
Я застрял с немного раздражающей проблемой прямо сейчас. У меня есть приложение Silverlight 4 (по умолчанию запускается OOB). Он использует WCF с net.tcp в качестве средства связи с сервером. Клиент использует центральный экземпляр прокси-клиента wcf. Пока все работает на стороне сервера, все в порядке.
Если я убиваю сервер в середине всего, я тону в лавине исключений на стороне клиента (потеря соединения, сбой канала и т. Д. И т. Д.).
Теперь я ищу способ справиться с этим чисто и централизованно (если это возможно).
Приложение SL имеет один объект центрального клиента, расположенный в App.cs (общедоступный статический MyClient Client { get;set;}), который инициализируется при запуске приложения.
Любая идея, как правильно обрабатывать любые проблемы с подключением на клиентском объекте?
2 ответа
Вы упоминаете, что используете центральный экземпляр клиентского прокси WCF.
Если это так, то при возникновении ошибки сервера прокси перейдет в состояние Failed. Чтобы все было централизовано, вы можете привести клиентский прокси к ICommuicationObject
и прикрепить обработчик событий к Faulted
событие, которое заменяет сбойный прокси, новым прокси при возникновении события.
Применяются обычные предупреждения о безопасности потоков для централизованного доступа к ресурсам!
Я думаю, что нашел работоспособное - хотя и не централизованное - решение. Вместо того, чтобы загромождать код блоками try / catch, кажется, что все, что ему нужно, это нулевая проверка свойства event.Error. Если что-то случилось с соединением, это свойство всегда не равно нулю. Исключения возникают только при попытке доступа к event.Result.
Возможно, это не самое красивое решение, но пока оно работает.
Возможно, есть более элегантный способ, хотя...