我开发了一个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)。
发布于 2013-07-31 19:59:19
我找到了解决方案。您必须添加和删除SessionStateModule:
<configuration>
...
<system.webServer>
...
<modules>
<remove name="Session" />
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
...
</modules>
</system.webServer>
</configuration>
我不知道为什么微软不把它添加到项目模板的web.config中?
发布于 2019-06-11 03:04:10
当我部署我的应用程序时,我以为我的控制器中的Session
是空的,但我错了。事实证明,我错过了lambda表达式的微妙之处。虽然这不是发问者的解决方案,但这个问答在搜索中排名很高,所以我希望这个答案可以节省其他人的时间。
我的控制器最初包含如下内容:
HostingEnvironment.QueueBackgroundWorkItem(ct => Foo(ct, Bar(Session)));
Bar
是一个从会话中获取值的静态方法,它抛出了一个试图访问其参数的NRE。我修改了我的控制器代码,如下所示,一切正常:
var bar = Bar(Session);
HostingEnvironment.QueueBackgroundWorkItem(ct => Foo(ct, bar));
令人费解的是,为什么在我的本地机器上测试时,原始代码还能正常工作!
https://stackoverflow.com/questions/17947975
复制相似问题