对于给定的 ASP.NET 请求,我在事件日志中看到了太多次“ContextId”。我最近开始研究由 ASP.NET 推出的 ETW 事件,并希望在我自己触发的事件中重新使用此 ContextID。
我怎样才能做到这一点?
System.Threading.Thread.CurrentContext 似乎没有。它始终为 0。
这是一个记录不充分的功能,但是是的,您可以获得它。
它位于 HttpWorkerRequest RequestTraceIdentifier 属性上。
http://msdn.microsoft.com/en-us/library/system.web.httpworkerrequest.requesttraceidentifier.aspx
您可以从HttpWorkerRequest.RequestTraceIdentifier
酒店获得。请注意,显然您需要启用 IIS ETW(Windows 事件跟踪)功能,否则此属性将为Guid.Empty
. 以下是如何从中获取它HttpContext
:
var serviceProvider = (IServiceProvider)HttpContext.Current;
var workerReqest = (HttpWorkerRequest)serviceProvider.GetService(typeof(HttpWorkerRequest));
var requestId = workerReqest.RequestTraceIdentifier;