Как получить доступ к ASP.NET / IIS ContextId - PullRequest
1 голос
/ 09 октября 2011

Я слишком много раз видел в своих журналах событий этот "ContextId" для данного запроса ASP.NET.Недавно я начал изучать события ETW, которые вытесняются ASP.NET, и хочу повторно использовать этот ContextID в моих собственных событиях, которые я запускаю.

Как я могу это сделать?

System.Threading.Thread.CurrentContext, похоже, не имеет его.Это всегда 0.

Ответы [ 2 ]

2 голосов
/ 04 ноября 2014

Вы можете получить его из свойства HttpWorkerRequest.RequestTraceIdentifier. Обратите внимание: очевидно, что вам нужно включить функцию IIS ETW (Event Tracing for 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

2 голосов
/ 12 октября 2011

Это плохо документированная функция, но вы можете ее получить.

Она находится в свойстве HttpWorkerRequest RequestTraceIdentifier.

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

...