2012-08-17 13 views
2

我剛剛安裝了.Net 4.5,並注意到當我試圖從CallContext中檢索一個項目時,仍然在.Net 4下運行的現有Web應用程序失敗,在安裝完成之前以及已經完成了去年。在做一個HTTP Post到ashx時打破.net 4.5 Callcontext的改變?

在應用程序的AuthenticateRequest事件中,我們使用用戶的身份加載有關用戶的更多安全信息。然後將其添加到CallContext中以供以後使用。

例如

protected void Application_AuthenticateRequest(object sender, EventArgs e) 
    { 
     if (HttpContext.Current.User != null && HttpContext.Current.User.Identity.IsAuthenticated) 
     { 
      // set someValue 
      CallContext.SetData(ContextIdentifier, someValue); 
     } 
    } 

在CallContext中的值是在生命週期後分檢索。 e.g CallContext.GetData(ContextIdentifier)

然而,請求從HTTP「POST」請求中的ashx的時候,該值現在爲空,但在「GET」請求中的值是正確的。

我無法找到記錄的原因,爲什麼這會突然發生變化,或者這是否是現在的設計以及爲什麼它會影響現有的.Net 4應用程序?

我明顯的解決方法是也將數據放在HTTPContext上,但沒有理解爲什麼我不確定使用CallContext會在其他地方引發問題的原因!

任何幫助/理解會感激地收到

+0

更新:這似乎是mscorlib.dll已被更新,但仍不能解釋爲什麼 – SiGent 2012-08-17 13:07:53

+0

它會出現這種情況只發生在IE中,我得到一個不同的堆棧跟蹤。 當它工作時,我得到和額外的PiplineRuntime.ProcessRequestNotification – SiGent 2012-08-17 14:43:03

回答

1

http://forum.springframework.net/showthread.php?572-CallContext-vs-ThreadStatic-vs-HttpContext

看來,這是HTTP管道設置呼叫上下文,但我必須只看到它,因爲現在的改進

+0

如果您需要在單個請求的上下文中流動狀態,唯一受支持的方式是通過HttpContext.Items字典。當ASP.NET執行線程跳轉時,其他上下文對象(如CallContext)不一定會傳播。 如果我不得不猜測爲什麼這隻會在IE中重演,它可能與Session有關。如果IE有一個會話cookie和其他瀏覽器沒有,那麼[異步] SessionStateModule可能是強制線程跳轉的模塊。 – Levi 2012-08-21 23:51:38