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