WCF NetTcpBinding проблемы тайм-аута - странное поведение - PullRequest
0 голосов
/ 06 декабря 2011

Связывание, которое я использую, - NetTcpBinding (через Интернет), со всеми компонентами параллелизма и maxconnection, установленными на высокое значение (4000 maxconnection, одновременный и т. Д.), Поэтому регулирование установлено очень высоким, и на самом деле из wcf счетчики производительности сервера Я вижу, что ни один из счетчиков параллелизма не заполнен, НО ... но я испытываю кошмар тайм-аута, описывающий следующее:

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

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

Операторы выполняют одну и ту же операцию тысячи и тысячи раз в день, и иногда они принимают ошибку тайм-аута, даже если после того, как они могут выполнить ту же операцию быстро, без каких-либо задержек, также в то время как кто-то получает тайм-аут на тот же компьютер с другим экземпляром клиента, они могут сделать звонок, и он идет быстро! И проверка ошибок на стороне сервера ничего не регистрируется в реализации сервиса и ничего не сохраняется в базе данных, поэтому методы никогда не вызывались по запросу, поэтому я абсолютно думаю о какой-то ошибке во время инициализации вызова, может быть, аутентификация, токенизация, криптование или что-то в этом слое, но я не могу найти ни одного кровавого сообщения об ошибке (возможно, включение трассировки wcf?).

В любом случае дело в том, что мы получили одно и то же старое программное обеспечение, написанное на классическом asp с обычным http-запросом клиент-сервер, и таких проблем никогда не бывает, даже если мы говорим об одном и том же интернет-соединении, так о чем я должен думать? Интернет-исследователь делает что-то волшебное, когда появляются ошибки? WCF получил скрытую конфигурацию, которую я могу установить, чтобы улучшить это поведение? Что я могу сказать, так это то, что я пытался настроить нашу службу wcf в WsHttpBinding, и такого рода тайм-ауты никогда не происходят, даже если у нас все еще появляются некоторые ошибки, но соединение немедленно освобождается, даже если соединение довольно То же самое, что и соединение tcp, потому что по умолчанию wshttpbinding настроен для поддержки активности канала tcp, но я до сих пор не понимаю, почему с tcp я получаю такие таймауты.

Если кто-то может мне помочь, я буду очень признателен!

Спасибо!

Ответы [ 2 ]

1 голос
/ 03 января 2013

Проблема была связана с плохим оборудованием, и было действительно трудно отлаживать, также с wireshark (tcp sniffer) пакеты не показывали никаких особых ошибок, мы нашли некоторые tcp-повторы, и это могло быть симптомом, но на самом деле пакеты просто застряли где-то внутри модем-маршрутизатора, который был телекоммуникационным модемом (pirelli gate 2 plus), после смены модема / маршрутизатора проблема полностью исчезла.

В любом случае мы выяснили, чтоwsHttpBinding через http, он более надежен для подключения к Интернету, где у вас нет контроля, и вы не можете быть уверены, какое оборудование установлено на сайте.

Надеюсь, это может помочь и кому-то еще:)

0 голосов
/ 06 декабря 2011

Мы столкнулись с той же проблемой, но с привязкой WsHTTP.Вы можете смоделировать описанный выше сценарий, вызвав одну и ту же операцию в цикле без явного закрытия клиентского соединения.Чтобы избежать этой проблемы, проверьте, закрываете ли вы клиентские подключения явно по завершении каждой операции, иначе запросы будут накапливаться на сервере.закройте клиент явно как client.Close ().

Это устранит нагромождение запросов на сервере и повысит производительность приложения.

...