C# Thread.CurrentThread存储自定义数据,如用户ID

C# Thread.CurrentThread存储自定义数据,如用户ID,c#,.net,wcf,C#,.net,Wcf,在.net 4中,是否可以在Thread.CurrentThread对象中存储自定义值(如userid) 我正在尝试将wcf客户端的用户ID存储在MessageInspector的客户端的AfterReceiveRequest方法中,如下所示: request.Headers.Add(MessageHeader.CreateHeader("userid", string.Empty, userid)); 在服务器端,我想在AfterReceiveRequest方法中的Thread.Curren

在.net 4中,是否可以在Thread.CurrentThread对象中存储自定义值(如userid)

我正在尝试将wcf客户端的用户ID存储在MessageInspector的客户端的AfterReceiveRequest方法中,如下所示:

request.Headers.Add(MessageHeader.CreateHeader("userid", string.Empty, userid));
在服务器端,我想在AfterReceiveRequest方法中的Thread.CurrentThread中检索它


这可能吗?

不建议使用ThreadStatic,因为WCF将随机使用线程池中的线程,并且当线程被回收时,ThreadStatic变量不会重新初始化。另外,如果您有一个具有多个WCF调用的会话,那么同一个服务实例可能会在不同的调用之间切换线程

您应该创建OperationContext扩展。


请参见

如果您使用异步(在.net 4.5中相当常见),这可能会被证明是一种有问题的处理方式,因为为代码提供服务的线程可能是线程池中的任何线程之一。为什么不转到服务器上OperationContext.Current的headers集合?可能是