我有一个将由夜间作业流程文档调用的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();
}
}
答案 0 :(得分:0)
我认为你最好的选择是把它分成两个单独的过程。您将无法使用基于IIS / ASP.NET的进程并尝试使其保持活动状态。
如果我是你,我会做类似的事情:
你会在答案中找到类似的建议:
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中的空闲计时器。当进程完成时,静态类停止访问网页。