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

最佳答案

IIS Express可能配置了一个模块,该模块将在CorrelationManager上设置ActivityId。我相信有许多模块可以做到这一点,例如FailedRequestsTracingModule(您实际上不需要监视失败的请求,因此可能会减少性能开销),并且许多APM工具(如Stackify)也可以做到这一点。

如果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() {}
}

08-19 06:02