我有一个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();
}
}
最佳答案
我认为您最好的选择是将其分为两个独立的过程。您将在基于IIS/ASP.NET的过程中遇到麻烦,并尝试使其保持 Activity 状态。
如果我是你,我会做类似的事情:
您会在这里的答案中找到类似的建议:
Handling Web Service Timeouts While Performing Long-Running Database Tasks
Long running webservice architecture
Recommendations for designing a long-running, resource-intensive web service
关于.net - 如果生成的线程仍在工作,则使Web服务保持事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4350660/