在Windows Service托管的WCF服务中创建后台线程是一种好习惯吗?
像这样的东西:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)]
public class Service : IService
{
private void DoWork()
{
...
}
public Service()
{
Thread thread = new Thread(new ThreadStart(DoWork));
thread.Start();
}
}
最佳答案
因此,您有一个连续的过程,该过程从某个源中提取数据并进行中继。对于WCF中的后台线程来说,这是一个很好的情况,因为您的工作不是基于传入的调用,也无法做到。
请注意,由于无法控制的原因,IIS工作进程可能会随时关闭。同样,回收过程中工作流程可能会重叠。这意味着可以在同一盒子上同时运行该线程的两个实例。如果您出于高可用性原因要在多台计算机上运行该应用程序,则同样如此。
Windows服务更稳定,但它们也必须可重新启动(例如,在部署时或出现使进程崩溃的错误时)。
还要确保捕获该线程上发生的所有错误。未处理的异常会在不通知开发人员的情况下终止该进程。
由于您托管在Windows服务中,因此我没有理由在Service
类的构造函数中维护线程。保持WCF之外的状态。例如,在您的Windows服务类中。
关于.net - WCF中的后台线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29449715/