在IIS System.Diagnostic.Trace.CorrelationManager.ActivityId上工作时生成为空

时间:2015-08-31 06:56:53

标签: c# asp.net .net

我们使用System.Diagnostic.Trace.CorrelationManager类来完成端到端的跟踪。该类有一个guid属性“ActivityId”,默认情况下会在每个请求中生成。 我们的跟踪在iis express上运行良好但是在iis System.Diagnostic.Trace.CorrelationManager.ActivityId上部署项目之后没有生成。

2 个答案:

答案 0 :(得分:1)

IIS Express可能会配置一个模块,该模块将在CorrelationManager上设置ActivityId。我相信有很多模块可以做到这一点,一个例子是FailedRequestsTracingModule(你实际上并不需要监视失败的请求,因此可能会降低性能开销),而像Stackify这样的许多APM工具也会这样做。

如果Trace.CorrelationManager.ActivityId为空,您可以确保IIS配置为使用设置它的模块,或者您可以创建一个简单的模块,如:

public class SetActivityIdModule : IHttpModule {
  public void Init(HttpApplication context) {
  context.BeginRequest += (sender, args) =>
    {
      if (Trace.CorrelationManager.ActivityId == Guid.Empty) Trace.CorrelationManager.ActivityId = Guid.NewGuid();
    };
  }
  public void Dispose() {}
}

答案 1 :(得分:0)

解决方案我想出了在iis上启用请求跟踪模块,但这导致服务器上的过载过多,所以我决定自己生成它而不是信任iis