1

对于给定的 ASP.NET 请求,我在事件日志中看到了太多次“ContextId”。我最近开始研究由 ASP.NET 推出的 ETW 事件,并希望在我自己触发的事件中重新使用此 ContextID。

我怎样才能做到这一点?

System.Threading.Thread.CurrentContext 似乎没有。它始终为 0。

4

2 回答 2

2

这是一个记录不充分的功能,但是是的,您可以获得它。

它位于 HttpWorkerRequest RequestTraceIdentifier 属性上。

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

于 2011-10-12T04:01:54.663 回答
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

于 2014-11-03T23:03:25.300 回答