如果生成的线程仍在工作,则保持webservice活动

时间:2010-12-03 22:58:03

标签: .net multithreading web-services application-pool

我有一个将由夜间作业流程文档调用的Web服务,每个文档将在其自己的后台处理器上排队并执行。根据负载情况,此过程可能需要几个小时或几个小时。如果它没有做任何事情,我不想让它活着。但是当一个线程产生并立即返回空闲时钟时,即使有一个线程工作。我没有将线程设置为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 :(得分:0)

我认为你最好的选择是把它分成两个单独的过程。您将无法使用基于IIS / ASP.NET的进程并尝试使其保持活动状态。

如果我是你,我会做类似的事情:

  1. 将记录写入DB / File /队列,以指示长时间运行的线程必须启动。
  2. 让Windows服务监视信号的DB /文件/队列,然后开始处理。
  3. 你会在答案中找到类似的建议:

    Handling Web Service Timeouts While Performing Long-Running Database Tasks

    Long running webservice architecture

    Recommendations for designing a long-running, resource-intensive web service

答案 1 :(得分:0)

对于不涉及任何编码的解决方案,您可以通过将默认的空闲超时值20分钟更改为0来禁用IIS'不活动监视器。转到应用程序池中的高级设置,这是第二个设置在“过程模型”部分。

答案 2 :(得分:0)

为了解决这个问题,我创建了一个静态类,当我在ThreadExecuteBulkRun中工作时,静态类有一个计时器,每隔5分钟就会对Web服务页面进行重新组织,该页面将重置IIS中的空闲计时器。当进程完成时,静态类停止访问网页。