WCF: Close () действительно закрывает соединение? - PullRequest
4 голосов
/ 30 января 2012

У нас есть некоторые проблемы со службами WCF, и я делаю некоторые тесты: Я только что создал новый клиент WCF и сервис с настройками по умолчанию и отслеживаю, как это работает на уровне TCP. Я использую .net 4.0 и net.tcp привязка

И что я вижу: после использование оператора закрывает WCF, на самом деле не закрывает соединение с сервером ... На уровне TCP он должен отправить пакет [FIN] на сервер, но вместо этого он ничего не делает, просто ждет и через 2 минуты сервер завершает соединение с пакетом [RST]. Я прикрепил несколько скриншотов из wireshark

Я верю, что так работает wcf, но я не смог найти какую-то информацию, чтобы подтвердить это. Также я заметил, что если после закрытия оператора using я открываю новый оператор using, он использует тот же порт для связи на стороне клиента ... (portharing на клиенте false)

Мои вопросы:

  • Почему WCF не закрывает соединение с сервером после использования оператора закрытая?
  • Что я могу сделать, чтобы правильно закрыть соединение (отправить оператор [FIN])?

Спасибо. постскриптум Я не прилагаю никаких конфигов, потому что это значения по умолчанию, которые VS2010 создает для меня.

wcf communication on tcp level

1 Ответ

1 голос
/ 30 января 2012

Угадайте, но netTcpBinding реализует кеш подключения . WCF будет «висеть» на TCP-соединении, пока какой-либо внутренний параметр / логика не решит, что его можно освободить. Это одна из причин того, что метод Dispose может генерировать исключение «по замыслу».

{My 2 ¢: Независимо от того, насколько хорошо дизайнеры WCF рационализировали это решение для себя, в реальном мире, это было очень опасно.}

...