我看过很多关于 Agile Asp.Net 请求处理方式的文档?我想知道 WCF 请求处理的情况是否相同。我们可以相信启动 Wcf 请求处理的线程会完成它吗?
我正在维护一个 Wcf 应用程序,其中在很多地方都使用了 ThreadStatic 变量。虽然代码有效,但它可靠吗?值得改变还是应该保持原样?
我看过很多关于 Agile Asp.Net 请求处理方式的文档?我想知道 WCF 请求处理的情况是否相同。我们可以相信启动 Wcf 请求处理的线程会完成它吗?
我正在维护一个 Wcf 应用程序,其中在很多地方都使用了 ThreadStatic 变量。虽然代码有效,但它可靠吗?值得改变还是应该保持原样?
创建 WCF 服务时,您可以通过使用ServiceBehavior
属性装饰服务实现类来设置线程和服务实例化行为:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]
class SingleCachingHttpFetcher : IHttpFetcher
编辑
我进行了更多研究,发现了这篇文章: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 组件,但它也应该适用于其他单线程需求。