.net - WCF中的后台线程

标签 .net multithreading wcf

在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/

相关文章:

.net - 是否有使用 SqlBulkCopy 的替代 InsertAllOnSubmit 实现的库?

c++ - 如何防止此无锁堆栈函数中的未定义行为和 ABA 问题?

Java 线程 : Is it possible view/pause/kill a particular thread from a different java program running on the same JVM?

multithreading - 了解更多有关命令式并发编程的最佳方法是什么?

.net - 如何设计可由多个端点使用的 Web 服务 (microsoft)?

.net - 断开连接的域客户端上的 SecurityNegotiationException

asp.net-mvc - 将 DTO 转换为 View 模型

c# - DetailsView 仅在单击 2 次后不更新和更改,Cancel 不以只读方式显示可编辑值

c# - 如何关闭具有在不同线程上运行的多个窗口的 WPF 应用程序?

c# - 如何防止 Mono 垂直拉伸(stretch) WinForms 应用程序中的窗口(在 Linux 上)?