如何访问ASP.NET / IIS ContextId

时间:2011-10-09 19:43:27

标签: asp.net iis etw

在我的事件中,我已经看过很多次记录给定ASP.NET请求的“ContextId”。我最近开始研究由ASP.NET推出的ETW事件,并希望在我自己的事件中重用这个ContextID。

我该怎么做?

System.Threading.Thread.CurrentContext似乎没有它。它总是0。

2 个答案:

答案 0 :(得分:2)

这是一个记录不完整的功能,但是你可以得到它。

它位于HttpWorkerRequest RequestTraceIdentifier属性上。

http://msdn.microsoft.com/en-us/library/system.web.httpworkerrequest.requesttraceidentifier.aspx

答案 1 :(得分:2)

您可以从HttpWorkerRequest.RequestTraceIdentifier属性获取它。请注意,显然您需要启用IIS ETW(Windows事件跟踪)功能,否则此属性将为Guid.Empty。以下是如何从HttpContext获取它:

var serviceProvider = (IServiceProvider)HttpContext.Current;
var workerReqest = (HttpWorkerRequest)serviceProvider.GetService(typeof(HttpWorkerRequest));
var requestId = workerReqest.RequestTraceIdentifier;

参考:https://github.com/serilog/serilog/commit/b289dbcde3e0f7366d90daf66e00c94f4cc58de3#diff-4934d624fc1d467b08411d520972e840R48