我有一个WCF服务,它会记录每次调用数据库。稍后,如果发生异常,它也会记录到单独的数据库中。
我想要一种将这两个日志绑定在一起的方法,以便我们可以看到可能导致异常的原因。为此,我想要为每次通话获得某种独特的ID。
由于整个事情在单个线程上执行,我可以例如将线程名称设置为GUID,例如。 System.Threading.Thread.CurrentThread.Name = Guid.NewGuid().ToString();
但是这有点笨拙。
在网上搜索,我发现了System.Threading.Thread.CurrentContext.SetProperty()
,但我想知道那个背景是什么。它是否设计用于存储线程持续时间的属性?每个线程都是唯一的吗?
如果我同时有5个WCF呼叫,我不希望在上下文中发生什么冲突,如果它不是“每个呼叫”可以这么说。
有人可以澄清吗?
答案 0 :(得分:6)
我不会使用该属性,因为微软称它仅供内部使用:
"This API supports the .NET Framework infrastructure and is not intended to be used directly from your code."
但是,你应该可以使用Thread Local Storage
来做同样的事情。该链接给出了一个示例,说明如何为线程设置字符串属性。
另见http://www.c-sharpcorner.com/UploadFile/1d42da/working-with-thread-local-storagetls-in-C-Sharp/