C# WCF是否在同一线程中执行单一WCF服务中的操作?

C# WCF是否在同一线程中执行单一WCF服务中的操作?,c#,.net,wcf,C#,.net,Wcf,我有一个带有ServiceBehavior属性的服务 [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)] 此服务中的操作是否有可能由同一线程执行 我将一个重要数据存储在ThreadLocal变量中,该变量将用于操作的单个执行。否 每个请求都在不同的线程中得到响应。InstanceContextMode.Single属性指定服务

我有一个带有ServiceBehavior属性的服务

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single,
 ConcurrencyMode = ConcurrencyMode.Multiple)]
此服务中的操作是否有可能由同一线程执行

我将一个重要数据存储在ThreadLocal变量中,该变量将用于操作的单个执行。


每个请求都在不同的线程中得到响应。InstanceContextMode.Single属性指定服务对每个请求使用相同的对象(及其成员)。

请注意,WCF中的线程由ThreadPool处理=>线程在请求处理后不会被释放,而是返回到池中,以便可以重新用于其他请求处理。我不确定如何使用ThreadLocal,但使用ThreadStaticAttribute,这可以轻松地将值从一个请求处理传递到下一个随机请求处理,该处理将使用相同的线程。

为清楚起见,每个请求/线程排队使用相同的对象好,但是一个线程不能同时执行多个操作。因此,如果我在每次操作后删除ThreadStatic/ThreadLocal变量,我是安全的?我不知道WCF中有任何线程切换,所以我说是的,您应该是安全的。但是,如果您在应用程序中发现一些奇怪的非确定性行为,这应该是您检查的第一个区域。实际上,异步服务操作中可能存在线程切换,但我认为您不使用它们: