Подтвердить что ты не робот

Что происходит, когда я закрываю/прерываю канал WCF/прокси?

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

  • Что происходит, когда я вызываю Close() или Abort() в прокси-сервере WCF? Какая разница?
  • Как он отличается между типами привязок (например, беззаботный BasicHttpBinding против чего-то сеансового)?
  • Почему Close() может запускаться в определенных ситуациях и почему это может быть операция блокировки?
4b9b3361

Ответ 1

Закрытие клиента WCF
Клиент имеет унаследованную ответственность за изящное закрытие соединения. Всегда рекомендуется закрыть прокси-клиент. Если привязка между клиентом и сервисом является сеансом транспортного уровня, то закрытие прокси-сервера имеет важное значение для срыва связи между обеими сторонами. Служба имеет порог полезной нагрузки, определенный для одновременных подключений. Если количество параллельных подключений выходит выше этого порога линейно, то общая производительность сервиса уменьшается экспоненциально. Вот почему очень важно как можно скорее избавиться от соединения. Закрытие прокси также уведомляет экземпляр службы о том, что он больше не используется и может быть собран GC (при условии управления экземпляром службы). Если клиент не закрывает соединение, он по-прежнему автоматически сбрасывается таймаутами WCF (находится в файлах конфигурации).

Отмена клиента WCF
В ситуации, когда есть ошибка в взаимодействии сервис-клиент, объекты на обоих концах потенциально полностью нарушаются. Таким образом, использование прокси после исключения не рекомендуется. Учитывая, что WCF-привязка использует сеансы транспорта, клиент после сбоя даже не сможет его закрыть (если не было сеанса транспортного уровня, то клиент мог использовать или закрыть прокси-сервер, но это не рекомендуется, так как конфигурация сеансов может изменение). Поэтому после того, как произошла ошибка, единственной безопасной операцией является прервать прокси-сервер.

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