Что происходит, когда я закрываю / прекращаю канал / прокси WCF? - PullRequest
23 голосов
/ 06 мая 2011

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

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

1 Ответ

24 голосов
/ 01 сентября 2011

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

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

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

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