2

我有一个 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();
        }

    }
4

3 回答 3

0

我认为您最好的选择是将其分成两个单独的过程。您将在使用基于 IIS/ASP.NET 的进程并试图使其保持活跃时遇到问题。

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

  1. 将一条记录写入数据库/文件/队列以指示长时间运行的线程必须启动。
  2. 让 Windows 服务监视信号的 DB/文件/队列,然后开始处理。

您会在此处的答案中找到类似的建议:

在执行长时间运行的数据库任务时处理 Web 服务超时

长期运行的 Web 服务架构

设计长期运行的资源密集型 Web 服务的建议

于 2010-12-03T23:03:32.757 回答
0

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

于 2011-05-13T16:05:58.707 回答
0

为了处理这个问题,我创建了一个静态类,当我在 ThreadExecuteBulkRun 中工作时,静态类有一个计时器,它每 5 分钟记录一次 web 服务页面,该页面重置 IIS 中的空闲计时器。并且当该过程完成时,静态类停止访问网页。

于 2011-12-05T16:26:59.320 回答