我正在使用多线程wcf maxConcurrentCalls = 10。通过记录对我的服务的调用,我看到10个不同的线程正在我的服务类中执行,并且它们在以下调用中被重用。销毁一个wcf线程
我可以告诉WCF销毁/删除一个线程,以便在下次调用时创建一个新线程吗?
这是因为我有线程静态状态,有时我想清除(在意外的异常)。我正在使用线程静态范围来获得性能。
我正在使用多线程wcf maxConcurrentCalls = 10。通过记录对我的服务的调用,我看到10个不同的线程正在我的服务类中执行,并且它们在以下调用中被重用。销毁一个wcf线程
我可以告诉WCF销毁/删除一个线程,以便在下次调用时创建一个新线程吗?
这是因为我有线程静态状态,有时我想清除(在意外的异常)。我正在使用线程静态范围来获得性能。
WCF不会创建新的线程。它使用线程池中的线程来处理请求。所以当一个请求开始时,它会从这个池中绘制一个线程来执行请求,并在完成之后将线程返回到池中。 WCF使用下面的线程的方式是您不应该依赖的实现细节。你不应该在ASP.NET/WCF中使用线程静态来存储状态。
在ASP.NET中,你应该使用HttpContext.Items
和WCF OperationContext
存储一些状态,这将是可通过整个请求。
这里是一个good blog post你可以看看它说明了一个很好的方式来抽象。
在手动不控制线程的情况下使用ThreadStatic是不好的设计。 – 2011-03-13 12:06:28