我开发了一个ASP.NET MVC4Web应用程序(.net 4.5),它在Visual Studio2012中运行良好。在Windows Server2008 R2上部署到IIS7之后,我的控制器内部的HttpContext.Session对象似乎是空的。我创建了一个简单的测试ASP.NET MVC4应用程序来演示这个问题。
在我的测试应用程序中,我有一个简单的Home Controller
public class HomeController : Controller
{
public ActionResult Index()
{
if ( HttpContext != null && HttpContext.Session != null )
{
HttpContext.Session[ "test" ] = "a string in session state";
ViewBag.Info = HttpContext.Session[ "test" ];
return View();
}
else
{
if ( HttpContext == null )
{
ViewBag.Info = "beeeeuuuuu - HttpContext = null!!!";
}
else if ( HttpContext.Session == null )
{
ViewBag.Info = "beeeeuuuuu - Session = null!!!";
}
return View();
}
}
}
我的Index.chtml视图如下所示:
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
This is a simple test
<p>@ViewBag.Info</p>
因此,当我运行应用程序时,我得到了我所期望的结果:
Index
This is a simple test
a string in session state
但在我将应用程序部署到web服务器后,网站给出了以下页面,表明会话对象为空:
Index
This is a simple test
beeeeuuuuu - Session = null!!!
web应用程序部署到默认网站,该网站在ASP.NET v4.0应用程序池(集成管道)下运行。
我已经使用aspnet_regiis -ir在服务器上重新安装了ASP.NET,但这并没有帮助。在ISS服务器上启用(在进程中)会话状态。我希望任何人能在这里帮助我,因为我正在努力解决这个问题很长一段时间。
非常感谢,并致以亲切的问候。
更新:我还测试了使用.NET 4.0而不是4.5构建的ASP.NET MVC4,它也有同样的问题。我还部署了一个ASP.NET网页应用程序(.NET 4.0),它工作得很好(后面的代码中的HttpContext.Current.Session不是空的)。
更新II:我还尝试将会话状态存储在数据库中,这在我的开发机器上工作得很好,但在生产服务器上也有同样的问题(HttpContext.Session仍然返回null)。
https://stackoverflow.com/questions/17947975
复制相似问题