以下有关“另一个主题”的更多信息编辑了我的问题,我们指出我的问题不明确。
如何在不同的类中使用ThreadLocal<T>
传递数据?
基本上,我需要将LogContext信息从Webservice中的类传递给TraceExtension:SoapExtension
类(TraceExtension用于记录此WebService调用的另一个WebService的请求/响应)。
由于该功能在另一个线程而不是发起请求的线程上运行,我无法从ServiceContext:IExtension <InstanceContext>
获取它
,我通常会用于这样的事情。
我有一个使用Thread.GetNamedDataSlot()
方式的工作实现,但在性能测试中,我们发现存在内存泄漏问题。 (是的,我调用了Thread.FreeNamedDataSlot()
并且问题仍然存在)。这导致MS发布http://support.microsoft.com/kb/2540745可能存在泄漏问题,但在我们当前的发布时间表中,将无法在所有生产服务器上部署修复程序。建议的解决方法是使用System.Threading.ThreadLocal类。
到目前为止,我找到的所有资源/示例都在同一类和Parallelism和PLinq中都有ThreadLocal的实例。在一个类中初始化/设置数据并从另一个类中检索数据的示例将非常有用。
将数据传递到TraceExtension : SoapExtension
的任何其他方式也同样有用。
我们的日程安排有点紧张,非常感谢任何帮助。
使用更多信息进行修改:
请求所在的Webservice的线程创建了一个新的Thread,我们在其上运行一些后台处理,同时返回必要的响应。
新的Thread调用对其他后端Web服务的调用。我们还有一个TraceExtension类来跟踪对后端Web服务的请求/响应。
我们使用ContextInfo : ISynchronizeInvoke
将原始Thread中的LogContext信息传递给新线程上的方法。
问题是获取LogContext对象从调用后端webservice调用的类到TraceExtension类(在新线程上运行,而不是在客户端请求具有ServiceContext:IExtension<InstanceContext>
的原始线程上运行LogContext)