wcf - ThreadStatic - WCF 方法调用是否只在单个线程上执行?

标签 wcf threadstatic

我们的 WCF 服务引用的库之一使用 ThreadStatic 变量。服务方法在每次调用开始时设置它的值。我想知道这是否安全——换句话说,我们能否保证只有一个线程专门用于整个调用?或者是否有可能调用可以在一个工作线程上开始并在另一个工作线程上完成?或者是否可以将工作线程交换到不同的方法调用,然后再返回?

我们使用默认的 ConcurrencyMode.Single 和 InstanceContextMode.PerSession。

编辑

到目前为止我能找到的唯一信息是这篇博文,其中指出一个调用可以由多个线程处理:

http://blogs.microsoft.co.il/blogs/applisec/archive/2009/11/23/wcf-thread-affinity-and-synchronization.aspx

这个人是对的吗? Microsoft 是否提供任何权威信息?

最佳答案

如果你不确定你总是可以使用 CallContext 类: CallContext.LogicalSetData CallContext.LogicalGetData

虽然如果线程发生变化,ThreadStatic 将无法工作,但 Logical CallContext 会在 .NET 中传递,即使您创建自己的新线程/任务也是如此。

关于wcf - ThreadStatic - WCF 方法调用是否只在单个线程上执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13262979/

相关文章:

c# - 为什么线程之间意外共享 ThreadStatic 数据?

ASP.NET 与 WCF 聊天

c# - 无法创建相对 URI,因为 'uriString' 参数表示绝对 URI

wcf - 在 IIS 上发布 WCF 服务 .NET 3.5

c# - CallContext 正在转发之前设置的数据

c# - 初始化 ThreadStatic 字段仍然导致 NullReferenceException

c# - 在 DMZ 中进行 WCF 用户名/密码身份验证的推荐方法是什么

c# - 分层架构中的 Entity Framework ?

c# - ThreadStatic 属性如何工作?

c# - 从 .NET 探查器访问 ThreadStatic 字段