установка времени ожидания для длительной службы WCF - PullRequest
4 голосов
/ 05 января 2011

У меня есть метод службы WCF, выполнение которого занимает более двух часов (запускает несколько отчетов).Как я могу убедиться, что он не истекает вне зависимости от времени, которое требуется?Я думаю, что есть много настроек тайм-аута в конфиге WCF, я не уверен, какой из них актуален для меня.для веб-сервисов ASMX была возможность указать бесконечный тайм-аут, есть ли аналогичный для WCF?также мне нужно изменить какие-либо настройки IIS для этого (служба WCF размещается в IIS), например, перезапуск рабочих процессов, время простоя и т. д.

Ответы [ 3 ]

8 голосов
/ 05 января 2011

Это злоупотребление веб-сервисами.Не делайте этого.

Вместо этого пусть веб-служба запускает длительную операцию, выполняемую в отдельном процессе.Если клиентам необходимо знать, когда создаются отчеты, «отдельный процесс» отслеживает создание отчетов и отмечает, когда отчеты заканчиваются.Клиент может вызвать веб-службу для проверки этого состояния.

Вы действительно не хотите зависеть от того, HTTP-соединение остается открытым в течение нескольких часов.Это сеть.Вещи случаются в сетях.Плохие вещи.

5 голосов
/ 05 января 2011

Рассматривали ли вы использование обратных вызовов? Ваш клиент отправляет запрос, а затем ожидает уведомления от сервера, когда это будет сделано? Это, вероятно, потребовало бы изменения в клиенте, но в этом случае ваша служба может "погреметь цепочкой" и сообщить клиенту, когда отчет закончен.

справка: http://idunno.org/archive/2008/05/29/wcf-callbacks-a-beginners-guide.aspx

Тайм-ауты WCF: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/

Вы также должны учитывать тайм-ауты на стороне клиента. (binding.OpenTimeout, ReceiveTimeout, CloseTimeout и т. д.)

Другой вариант - разместить WCF в службе Windows, что может упростить вашу ситуацию, поскольку оно удаляет IIS из уравнения:

http://msdn.microsoft.com/en-us/library/ms733069.aspx

Или как насчет использования одностороннего вызова WCF? Таким образом, вызов вернется к клиенту как можно скорее после отправки запроса.

Нужен пример запуска и забыть асинхронный вызов службы WCF

1 голос
/ 05 января 2011

Попробуйте вместо этого создать службу рабочего процесса WCF (с использованием WF). Они специально предназначены для обработки длительных процессов, особенно если вы используете постоянство.

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