.NET 4.5 升级结果为空 CorrelationManager.ActivityId

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 支持。