IIS считает, что веб-сервис простаивает - PullRequest
3 голосов
/ 09 февраля 2011

Проблема заключается даже в том, что я установил потоки как «thrd.IsBackground = false», iis не считает его работающим, даже если это длительный процесс.Если я не отключу отключение в режиме ожидания для пула приложений, оно отключится, потому что считает, что оно не используется.Также, если я разверну новую версию, она прерывает все работающие потоки, вместо того, чтобы ждать истинного простоя всех процессов перед повторной обработкой и использованием нового кода.Что я здесь не так делаю?это мой код веб-сервиса:

  /// <summary>
    /// Summary description for LetterInitiateWS
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    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();

        }

        [WebMethod]
        public void ExecuteTemplateBulkRun(string templateCategory, string TemplateType)
        {
            var thrd = new Thread(() => ThreadExecuteTemplateBulkRun(templateCategory, TemplateType));
            thrd.IsBackground = false;
            thrd.Start();

        }

        private void ThreadExecuteBulkRun()
        {
            processor.ExecuteBulkRun();
        }
        private void ThreadExecuteTemplateBulkRun(string templateCategory, string TemplateType)
        {
            processor.ExecuteTemplateBulkRun(templateCategory, TemplateType);
        }

    }
}

Ответы [ 2 ]

2 голосов
/ 09 февраля 2011

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

Если вам нужно что-то запустить в течение длительного времени, запустите его в службе Windows.Вы можете использовать удаленное взаимодействие или очередь сообщений, чтобы запустить ее из веб-службы.

0 голосов
/ 09 февраля 2011

Одна вещь, которую вы могли бы сделать, это подключиться к событию Application_End. В худшем случае вы можете записать, какие потоки должны быть завершены, и в лучшем случае вы сможете настроить какую-то задержку, которая поддерживала бы приложение в рабочем состоянии до завершения потоков.

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