Поддержание веб-службы в рабочем состоянии, если порожденный поток все еще работает - PullRequest
2 голосов
/ 04 декабря 2010

У меня есть веб-сервис, который будет вызываться документами процесса ночной работы, каждый документ будет поставлен в очередь и выполнен на своем фоновом процессоре. Этот процесс может занять пару часов или несколько минут в зависимости от нагрузки. Я не хочу, чтобы он был живым, если он ничего не делает. Но когда появляется поток и сразу возвращается, часы простоя начинаются, даже если поток работает. я не установил поток в IsBackground, и он все еще заканчивается для простоя. Для моего теста я установил время простоя равным 1 минуте. Есть ли способ сохранить услугу как "ЖИВАЯ"

Вот код веб-сервиса:

public class LetterInitiateWS : System.Web.Services.WebService
    {

        private static Processor processor = new Processor();
        [WebMethod]
        public void ExecuteBulkRun()
        {
            var thrd = new Thread(() => ThreadExecuteBulkRun());
            thrd.IsBackground = false;
            thrd.Start();

        }

        private void ThreadExecuteBulkRun()
        {
            processor.ExecutBulkRun();
        }

    }

Ответы [ 3 ]

0 голосов
/ 13 мая 2011

Для решения, которое не требует никакого кодирования, вы можете просто отключить монитор неактивности IIS, изменив значение по умолчанию для времени простоя от 20 минут до 0. Перейдите в раздел «Дополнительные настройки» в своем пуле приложений, и это второенастройка в разделе «Модель процесса».

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

Для этого я создал статический класс, который, когда я работаю в ThreadExecuteBulkRun, статический класс имеет таймер, который каждые 5 минут на странице веб-службы, которая сбрасывает таймер простоя в IIS.и когда процесс завершается, статический класс перестает посещать веб-страницу.

0 голосов
/ 04 декабря 2010

Я думаю, что вам лучше всего разделить это на два отдельных процесса.У вас возникнут проблемы с процессом на основе IIS / ASP.NET, и вы попытаетесь сохранить его.

Если бы я был вами, я бы попытался сделать что-то вроде:

  1. Запишите запись в DB / File / queue, чтобы указать, что должен запускаться длительный поток.
  2. Попросите службу Windows контролировать DB / file / queue для сигнала и затем начать обработку.

Подобные предложения вы найдете в ответах здесь:

Обработка тайм-аутов веб-службы при выполнении длительных задач базы данных

Longработающая архитектура веб-сервиса

Рекомендации по разработке долговременного ресурсоемкого веб-сервиса

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