【发布时间】:2012-07-25 00:11:34
【问题描述】:
真的在为 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 功能。
欢迎任何想法或cmets!
谢谢。
【问题讨论】:
-
欢迎来到 Session 地狱 :-) 自从我停止在我的应用程序中使用 Sessions 后,我觉得我在天堂。
-
您是否尝试过仅对临时数据使用索引器?例如
-
是的 - 已经尝试了将东西放入和取出 tempdata 的所有可用排列 - 所有结果都完全相同......
标签: asp.net-mvc session iis asp.net-mvc-4