C# 在对ashx执行HTTP Post时破坏.net 4.5 Callcontext中的更改?

C# 在对ashx执行HTTP Post时破坏.net 4.5 Callcontext中的更改?,c#,asp.net,C#,Asp.net,我刚刚安装了.Net 4.5,注意到一个仍然在.Net 4下运行的现有web应用程序在我尝试从CallContext检索项目时失败了,而在安装之前,该应用程序工作得很好,并且在去年已经完成 在应用程序的AuthenticateRequest事件中,我们使用用户的身份来加载有关用户的更多安全信息。然后将其添加到CallContext中供以后使用 e、 g callcontext中的值将在生命周期的后期检索。例如 GetData(ContextIdentifier) 但是,当从http“POST”请

我刚刚安装了.Net 4.5,注意到一个仍然在.Net 4下运行的现有web应用程序在我尝试从CallContext检索项目时失败了,而在安装之前,该应用程序工作得很好,并且在去年已经完成

在应用程序的AuthenticateRequest事件中,我们使用用户的身份来加载有关用户的更多安全信息。然后将其添加到CallContext中供以后使用

e、 g

callcontext中的值将在生命周期的后期检索。例如 GetData(ContextIdentifier)

但是,当从http“POST”请求请求.ashx时,该值现在为null,但在“GET”请求中,该值是正确的

我找不到一个文件化的原因来解释为什么这会突然改变,或者这是否是出于设计,以及为什么它会影响现有的.NET4应用程序

我明显的解决办法是将数据也放在HTTPContext上,但不理解为什么我不确定使用CallContext是否会在其他地方引起问题

任何帮助/理解都将不胜感激


似乎是http管道在处理调用上下文,但我现在只能看到它,因为改进了

更新:mscorlib.dll似乎已经更新,但仍然无法解释为什么会出现这种情况,这只发生在IE中,我得到了不同的堆栈跟踪。如果需要在单个请求的上下文中流动状态,唯一受支持的方法是通过HttpContext.Items字典。当ASP.NET执行线程跳转时,其他上下文对象(如CallContext)不一定传播。如果让我猜一下为什么这只会在IE中受到谴责,可能与会话有关。如果IE有一个会话cookie而其他浏览器没有,那么[asynchronous]SessionStateModule可能就是强制线程跳跃的模块。
 protected void Application_AuthenticateRequest(object sender, EventArgs e)
    {
        if (HttpContext.Current.User != null && HttpContext.Current.User.Identity.IsAuthenticated)
        { 
             // set someValue 
            CallContext.SetData(ContextIdentifier, someValue);
        }
    }