出于各种常见原因,我想对我的 ASP.NET 应用程序使用跟踪。特别是因为我发现了使用服务跟踪查看器工具的可能性,它允许您以一种强大的方式检查您的跟踪。
由于我之前从未使用过这个trace的东西,所以我开始研究它。经过一段时间的 Google、SO 和 MSDN,我终于对事情的运作方式有了一个很好的了解。但我也发现了一件非常令人不安的事情。
在 ASP.NET 应用程序中使用跟踪时,通过 Web 请求将跟踪消息组合在一起非常有意义。特别是因为我想使用它的原因之一是研究性能问题。上述工具还通过<Corrleation>
在生成的 XML 文件中使用标签来支持这一点。又是从哪来的System.Diagnostics.Trace.CorrelationManager
。它还允许其他不错的功能,例如 Activity 启动/停止,它提供了更好的跟踪消息分组。很酷,对吧?
我也是这样,直到我开始检查CorrelationManager
实际居住的地方。毕竟 - 这是一个静态属性。在玩了一些 Reflector 之后,我发现了一些可怕的东西 - 它存储在CallContext
!我们不应该在 ASP.NET 中使用哪种东西,对吗?
所以......我在这里错过了什么吗?ASP.NET 中的跟踪真的存在根本缺陷吗?
补充: Emm,我有点自己重写这些东西的边缘。我仍然想使用整洁的工具来探索痕迹。有什么理由我不应该这样做?也许还有更好的东西?如果我能尽快得到一些答案,那就太好了。:)
补充2:我的一位同事证实这不仅仅是一个理论问题。他在他正在研究的系统中观察到了这一点。这样就解决了。我将建立一个新的小系统,按照我想要的方式做事。:)
补充 3:哇,太棒了……微软的人找不到在 ASP.NET 中使用 Correlation Manager 有什么问题。所以显然我们毕竟没有修复这个错误......