在使用Windows服务托管的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();
}
}
答案 0 :(得分:1)
因此,您有一个连续的过程,可以从某些来源获取数据并进行中继。对于WCF中的后台线程来说,这是一个很好的例子,因为你的工作不是基于来电而且不能成为。
请注意,IIS工作进程可以在任何时间点关闭,原因是您无法控制。此外,工作流程在回收时可能会重叠。这意味着在同一个框中,该线程的两个实例可以同时运行。如果您想出于HA原因在多台计算机上运行此应用程序,情况也是如此。
Windows服务更稳定,但它们也必须可以重新启动(例如,在部署时或当存在导致进程崩溃的错误时)。
还要确保捕获该线程上发生的任何错误。未处理的异常会导致进程无法通知开发人员。
由于您托管在Windows服务中,我认为没有理由在Service
类的构造函数中维护该线程。维持WCF以外的州。例如,在Windows服务类中。