2012-07-26 58 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)上工作。