Chr*_*ins 5 .net c# asp.net logging trace
长期以来,我们一直在使用 CorrelationManager.ActivityId 来帮助关联多个线程的日志条目。我们在 SessionStart 上创建 ActivityId 并将其存储在会话中以用于所有后续请求。
protected void Session_Start(object sender, EventArgs e)
{
if (this.Session["ActivityId"] == null)
{
var activityId = Guid.NewGuid();
this.Session["ActivityId"] = activityId;
System.Diagnostics.Trace.CorrelationManager.ActivityId = activityId;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我们从会话中重用它,如下所示:
protected void Application_PostAcquireRequestState(object sender, EventArgs e)
{
if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState)
{
if (this.Session["ActivityId"] != null)
{
System.Diagnostics.Trace.CorrelationManager.ActivityId = (Guid)this.Session["ActivityId"];
}
else
{
var activityId = Guid.NewGuid();
this.Session["ActivityId"] = activityId;
System.Diagnostics.Trace.CorrelationManager.ActivityId = activityId;
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面已经完美地工作了很长时间。
但是,一旦我们将 Web 服务器升级到 .NET 4.5.2,我们就会随机为 ActivityId 记录空的 Guids (00000000-0000-0000-0000-000000000000)。我们通过降级到 .NET 2.0,然后安装 4.0(不是 4.5.2)来验证这一点,问题就消失了。然后重新安装.NET 4.5.2后,问题又出现了。我们多次进行该练习以确保。
我在任何地方都找不到类似问题的任何提及。我们正在联系 Microsoft 支持。
归档时间: |
|
查看次数: |
491 次 |
最近记录: |