8

我有一个 WCF 服务,它记录对数据库的每次调用。稍后,如果发生异常,也会将其记录到单独的数据库中。

我想要一种将这两个日志联系在一起的方法,这样我们就可以看到可能导致异常的原因。为此,我想要某种可以为每次通话获取的唯一 ID。

由于整个事情是在单个线程上执行的,例如,我可以将线程名称设置为 GUID,例如。System.Threading.Thread.CurrentThread.Name = Guid.NewGuid().ToString();但这有点hacky。

在网上搜索,我发现了,System.Threading.Thread.CurrentContext.SetProperty()但我想知道那个上下文到底是什么。它是否旨在在线程期间存储属性?每个线程是唯一的吗?

如果我有 5 个同时 WCF 调用,我不希望上下文中发生的事情之间存在任何冲突,如果它不是“每次调用”可以这么说的话。

有人可以澄清一下吗?

4

1 回答 1

7

我不会使用该属性,因为 Microsoft 说它仅供内部使用:

"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/

于 2013-06-03T13:41:58.263 回答