2012-07-26 20 views
0

真的在掙扎MVC/TempData/Session /可能是IIS6類型的問題。MVC4/IIS6中的TempData/Session沒有返回存儲的值

我有一個簡單的MVC網站 - 主控制器是這樣的:

public class DemoController : Controller 
{ 
    [HttpPost] 
    public RedirectToRouteResult Index(SomeObject obj) 
    { 
     _someService.DoStuffWith(obj); 

     TempData.Add("SomeObject", obj); 

     return RedirectToAction("Index"); 
    } 

    [HttpGet] 
    public ViewResult Index() 
    { 
     var obj = TempData.Peek("SomeObject") as SomeObject; 

     return View("Hello", obj); 
    } 
} 

因此,這是一個大型簡單的POST重定向獲取 - 中郵友好行動從某處提交數據,得到它,用它做東西,將它放到臨時數據中,重定向到Get-friendly,再次拾取它,將用戶粘貼到模型中的對象的新視圖上。之前已經實現了十幾次,並且從未遇到過問題,但它始終在IIS7上運行。

這與當地在cassini和本地IIS 7.5上運行時的預期完全相同。但是,只要我部署到Server 2003和IIS6,我第一次嘗試訪問視圖中的「SomeObject」模型的任何屬性時,我會得到一個空引用異常。

那麼,什麼人有我想:

  • 我拋棄TempData的,只是推到會話[「不管」] - 用
  • 我推入HttpContext.Current相同的結果。會議[「不管」] - 以相同的結果
  • 我推入ControllerContext.HttpContext.Session [「不管」] - 以相同的結果

(誠然,我對它們之間的差異粗略- 從來沒有 現在需要擔心它)

  • 我已經確保會話狀態在IIS上打開。
  • 我已經檢查過,Asp.net會話標識符在請求之間沒有變化。
  • 我已經部署了2個獨立的服務器,在明確地使用SessionStateBehaviour.Required

兩個

  • 都運行2003和IIS6,相同的結果,我不能做什麼:

    • 部署到IIS7,我的本地機器外
    • 使用SqlServer SessionState的
    • 使用StateServer SessionState的

    另外值得一提的是,本網站使用的是MVC4 RC--儘管RC功能並未在網站的這個特定部分中使用。

    任何想法或意見是最受歡迎的!

    謝謝。

  • +0

    歡迎來到會議地獄:-)由於我已經停止在我的應用程序中使用會話,我覺得我是在天堂。 – 2012-07-26 12:10:19

    +0

    你有沒有嘗試過只使用索引器的臨時數據?例如 – dougajmcdonald 2012-07-26 13:35:24

    +0

    是啊 - 嘗試了所有可用的排列方式,並將東西放入tempdata中 - 所有結果都完全相同。 – 2012-07-26 16:14:53

    回答

    1

    這是我的系統上的問題 - 我有一個包含下劃線的服務器名稱。 RFC 952不允許在主機名中使用下劃線,並且可能會干擾設置cookie並因此保留會話的能力。

    爲了跟蹤這一點,我開始觀察每個控制器部分中的SessionID,並注意到每個帖子都在改變。這隻發生在我們的測試服務器上,因爲我們用_t來命名它以顯示它是一臺測試機器。哎喲!我發現this point

    這可能會提供其他價值。

    我希望這有助於

    大衛

    0

    這個問題對我來說是我這一套在我的web.config文件,但沒有使用SSL:

    <httpCookies requireSSL="true" />

    這設置可防止Cookie在不安全(即非SSL)連接(包括ASP.NET會話cookie)上工作。