5

我看过很多关于 Agile Asp.Net 请求处理方式的文档?我想知道 WCF 请求处理的情况是否相同。我们可以相信启动 Wcf 请求处理的线程会完成它吗?

我正在维护一个 Wcf 应用程序,其中在很多地方都使用了 ThreadStatic 变量。虽然代码有效,但它可靠吗?值得改变还是应该保持原样?

4

1 回答 1

4

创建 WCF 服务时,您可以通过使用ServiceBehavior属性装饰服务实现类来设置线程和服务实例化行为:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]
class SingleCachingHttpFetcher : IHttpFetcher

上面的代码片段来自http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.concurrencymode.aspx

编辑
我进行了更多研究,发现了这篇文章:http: //blogs.microsoft.co.il/blogs/applisec/archive/2009/11/23/wcf-thread-affinity-and-synchronization.aspx。它基本上说不,您不能确定启动请求的同一线程将是完成它的线程。

编辑 2
这个问题之前已经在StackOverflow讨论过。它链接到How to make a WCF service STA (single-threaded),其中描述了如何创建将强制使用单线程单元的 OperationBehavior。该示例处理调用 GUI 组件,但它也应该适用于其他单线程需求。

于 2010-03-01T15:23:21.477 回答