У нас есть служба 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 секунд.Кроме того, все другие транзакции завершаются успешно, независимо от нагрузки на сервис.
Я не могу увеличить время ожидания на одну минуту, учитывая тот факт, что сервис предназначен для выполнения операций электронной торговли, и на самом деле нет ничего, что действительно требует больше, чемнесколько секунд, чтобы закончить.
Это факты, и я надеюсь, что вы, ребята, могли бы придумать то, что я еще не пробовал.Пожалуйста, имейте в виду, что во время ответа это критически важная услуга миссии, и изменения или конфигурации, которые можно применить в производственной среде, очень ограничены.
Заранее спасибо.