Есть ли полный шаблон для клиента и сервера WCF? - PullRequest
0 голосов
/ 08 декабря 2018

У меня долгая история с использованием WCF, но я понял, что я всегда повторяю одни и те же вещи снова и снова (и, очевидно, то же самое для других коллег-разработчиков, которые используют WCF).Например, я использую его для простого недуплексного клиента:

try
{
   Channel.MyMethod();
}
catch
{
    //a LOT of various communications errors, which just annoying to handle and almost always simple disconnect
}

Я также делаю это как void Invoke (Action action) метод, который воссоздает канал, если он находится в Failedгосударство.Для дуплекса это намного хуже , потому что мне всегда нужно заботиться о том, чтобы проверить, есть ли еще соединение, иначе оно может просто ... зависнуть навсегда.Я делаю это, вызывая заглушку heartbeat:

 Channel.Heartbeat();

И когда возникает ошибка связи, я вызываю OnFaults в обратном вызове

 Callback.OnFaulted(...);

И если вы подумали об использовании сбойного события на Channel и ChannelFactoryвы совершенно не правы:

client = new Client();
((ICommunicationObject)client).Faulted += new EventHandler(client_Faulted);

да, он работает ... иногда, а иногда он все равно будет зависать, потому что это событие не гарантируется при отключении, инициированном сервером.

Итак, явсегда видеть эти проблемы в WCF:

  1. Воссоздание Channel / ChannelFactory (оба могут быть в состоянии Failed) для простого одностороннего клиента.
  2. Работа с большим количеством вариаций Communcation / Socket/ Timeout / Какие бы исключения WCF ни выбрасывал на клиенте.Они не описывают причину без включения трассировок WCF.
  3. Работа с проверкой состояния связи вручную при использовании дуплексных соединений (в отдельной задаче, вызов Heartbeat).
  4. Подписка на скрытые интерфейсы ICommunicationObject (что кажетсябесполезно, потому что не работает должным образом)
  5. Повторите работу с теми же исключениями на стороне сервера при использовании дуплекса.

Есть ли библиотека / прокси-компоновщик или прекрасный пример того, как следует обращаться со всемииз этих проблем в один ход?Лично это действительно раздражает, что прокси, сгенерированный VS, просто не работает в рабочем коде.

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