Сбой службы WCF каждые 23 часа: «Канал запроса истек во время ожидания ответа после 00:01:00» - PullRequest
3 голосов
/ 27 октября 2010

У нас есть служба WCF, размещенная в службе Windows.Прямо сейчас мы наблюдаем действительно странное поведение, заключающееся в том, что каждые 23 часа служба генерирует исключение для каждого звонка, совершенного с такой ошибкой:

Server was unable to process request. ---> The request channel timed out while waiting for a reply after 00:01:00. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout.---> The HTTP request to 'http://servername:8016/servicio/Autorizaciones' has exceeded the allotted timeout of 00:01:00. The time allotted to this operation may have been a portion of a longer timeout.---> The operation has timed out.

Продолжительностьсбой длится от 4 до 6 минут, и, вообще ничего не трогая, сервис выходит из строя и следующие ответы в порядке в течение следующих 23 часов, а затем снова ошибка.

Как указывалось выше, служба WCF размещается в службе Windows, установленной в ОС Windows 2008 Server.Клиентами, вызывающими службу, являются две разные веб-службы Asp.NET, одна из которых работает на одном сервере, а другая - на виртуальном сервере в производственной среде.Оба клиента представили одну и ту же проблему.

Конфигурация всей среды такова: телефонные звонки принимаются в системе IVR (скажем, узел 1), которая вызывает веб-службу (узел 2), которая получает некоторую информацию о звонке клиента.Как только клиент одобряет операцию, IVR вызывает веб-службу (узел 2), которая передает вызов службе WCF (узел 3) для обработки кредитной операции.Затем WCF выполняет операцию сокета TCP / IP через соединение VPN с другим объектом (узел 4).Эта связь длится от 3 до 10 секунд, регистрируется в постоянной базе данных и затем отправляется обратно по тому же пути к клиенту (узлы 3, 2 и 1).Эта платформа обрабатывает около 2000 транзакций в день, 24/7, за исключением тех, которые не выполняются по таймауту.Причина, по которой транзакция передается второй службе, заключается в целях безопасности.Объем данных, передаваемых при каждом вызове, составляет около 200 или 300 байтов.

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

Операции сокета TCPIP записываются в текстовый файл, и там не обнаружено проблем с временем отклика от внешнего объекта.Самое большое время было 9 секунд.Кроме того, трассировка операций с базой данных была зарегистрирована и не показала никаких проблем с производительностью.

Режим параллелизма службы установлен на ConcurrencyMode.Multiple, и, прежде чем приступить к работе, мы провели стресс-тест с десятью клиентами.совершая итеративные вызовы в течение 2 часов, обрабатывая сервис wcf около 30 тыс. транзакций без признаков влияния на производительность.Однако я уже отказался от проблемы параллелизма, потому что среднее время между транзакциями составляет одну минуту, а наибольшая длится примерно 9 секунд.Кроме того, все другие транзакции завершаются успешно, независимо от нагрузки на сервис.

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

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

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 27 октября 2010

Тот факт, что это происходит каждые 23 часа, звучит подозрительно, как перезапуск пула приложений (но сбой в 4-6 минут кажется слишком длинным).

Другая удаленная возможность - это сборка мусора поколения 2, но это время простоя также очень велико.

Очевидно, что вы можете отслеживать их, используя соответствующие встроенные счетчики производительности.

.NET CLR Счетчики производительности памяти : # Gen 2 Collections

Счетчики производительности WCF

[Вы уверены, что не запускается какое-то периодическое резервное копирование? У вас есть антивирусный сканер на этом компьютере?]

0 голосов
/ 27 октября 2010

Время вашего клиента в другом часовом поясе?У них одинаковое время с сервером?

Попробуйте установить MaxClockSkew.

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