MVC4 / IIS6中的TempData / Session不返回存储的值

时间:2012-07-26 11:56:28

标签: asp.net-mvc session iis asp.net-mvc-4

真的很挣扎于MVC / TempData / Session /可能是IIS6类型的问题。

我有一个简单的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 Redirect Get - 从某个地方提交数据,在Post-friendly行动中获取数据,用它做一些事情,将其戳入临时数据,重定向到Get-friendly,再次获取,使用模型中的对象将用户粘贴到新视图上。之前已经实施了十几次,并且从未出现过问题,但它始终存在于IIS7上。

这在cassini和本地IIS 7.5上本地运行时完全按预期工作。但是,一旦我部署到Server 2003和IIS6,我第一次尝试访问视图中“SomeObject”模型的任何属性时,我得到一个空引用异常。

那么,我还尝试了什么:

  • 我放弃了TempData并将其推入Session [“Whatever”] - 结果相同
  • 我已经进入HttpContext.Current.Session [“Whatever”] - 结果相同
  • 我已推入ControllerContext.HttpContext.Session [“Whatever”] - 结果相同

(不可否认,我对这些之间的差异非常粗略 - 以前从来不需要担心它)

  • 我确保在IIS上启用了会话状态。
  • 我检查过Asp.net会话标识符在请求之间没有变化。
  • 我已经部署到2个独立的服务器,两个服务器都运行2003和IIS6,两者都是相同的结果
  • 明确使用SessionStateBehaviour.Required

我无法做到的事情:

  • 在本地计算机之外部署到IIS7
  • 使用SqlServer SessionState
  • 使用StateServer SessionState

另外值得一提的是,该网站正在使用MVC4 RC - 尽管RC功能未在网站的这个特定部分使用。

非常欢迎任何想法或评论!

感谢。

2 个答案:

答案 0 :(得分:1)

这是我系统上的问题 - 我有一个包含下划线的服务器名称。 RFC 952不允许在主机名中包含下划线,并且可能会干扰设置cookie的能力,从而影响会话的持续性。

为了追踪这一点,我开始在每个控制器部分观察SessionID,并注意到每个帖子都在改变。这只发生在我们的测试服务器上,因为我们用_t命名它以显示它是一台测试机器。哎哟!

我找到了this point

这可能会带来其他价值。

我希望这会有所帮助

大卫

答案 1 :(得分:0)

The problem for me was I had this set in my web.config file, but wasn't using SSL:

<httpCookies requireSSL="true" />

This setting prevents cookies from working over unsecure (i.e. non-SSL) connections - including the ASP.NET session cookie.