Длительный асинхронный поток в WCF - PullRequest
6 голосов
/ 18 декабря 2010

Существует служба WCF с длительным асинхронным потоком. Эта длительная операция может длиться более 1 дня. Мы предоставляем услугу WCF на IIS 6.

Тема работает нормально, но через 20 минут мы получаем сообщение об ошибке:
"Тема была прервана"

В результате нить мертва.

Конфигурация нашей службы WCF:
[ServiceBehavior (InstanceContextMode = InstanceContextMode.Single)]
[ServiceBehavior (ConcurrencyMode = ConcurrencyMode.Single)]

Можете ли вы предложить источник этой проблемы?

Спасибо за ваши ответы.

Ответы [ 3 ]

9 голосов
/ 18 декабря 2010

Если нет активности (нет запросов) для этой веб-службы, IIS может принять решение о выгрузке домена приложения, что, конечно, приведет к уничтожению всех потоков. Значение по умолчанию составляет 20 минут и может быть настроено в свойствах пула приложений в IIS. Есть и другие факторы, которые могут привести к перезапуску пула приложений, такие как система, работающая на малой памяти. Поэтому размещение такой вещи в IIS может быть ненадежным. Вы можете рассмотреть возможность размещения долго выполняющихся задач в службах Windows.

7 голосов
/ 18 декабря 2010

В IIS6 есть настройка, которая отключает пул приложений через заданное время без запросов, по умолчанию это 20 минут. Кажется, это то, с чем вы сталкиваетесь. Вы можете найти этот параметр в свойствах пула приложений => вкладка «Производительность» => снять флажок «Завершение рабочих процессов после простоя».

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

2 голосов
/ 19 декабря 2010

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

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