Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 一旦部署到IIS 7(W 2008 R2),ASP.NET MVC 4 Web应用程序中的会话对象为空_Asp.net Mvc 4_Iis 7 - Fatal编程技术网

Asp.net mvc 4 一旦部署到IIS 7(W 2008 R2),ASP.NET MVC 4 Web应用程序中的会话对象为空

Asp.net mvc 4 一旦部署到IIS 7(W 2008 R2),ASP.NET MVC 4 Web应用程序中的会话对象为空,asp.net-mvc-4,iis-7,Asp.net Mvc 4,Iis 7,我开发了一个ASP.NET MVC 4 web应用程序(.NET 4.5),它在Visual Studio 2012中运行良好。在Windows Server 2008 R2上部署到IIS 7后,控制器中的HttpContext.Session对象似乎为空。我创建了一个简单的测试ASP.NETMVC4应用程序来演示这个问题 在我的测试应用程序中,我有一个简单的家庭控制器 public class HomeController : Controller { public ActionRes

我开发了一个ASP.NET MVC 4 web应用程序(.NET 4.5),它在Visual Studio 2012中运行良好。在Windows Server 2008 R2上部署到IIS 7后,控制器中的HttpContext.Session对象似乎为空。我创建了一个简单的测试ASP.NETMVC4应用程序来演示这个问题

在我的测试应用程序中,我有一个简单的家庭控制器

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>
HostingEnvironment.QueueBackgroundWorkItem(ct => Foo(ct, Bar(Session)));
但在我将应用程序部署到web服务器后,网站会显示以下页面,指示会话对象为空:

Index
This is a simple test 
beeeeuuuuu - Session = null!!!
web应用程序部署到默认网站,该网站在ASP.NET v4.0应用程序池(集成管道)下运行

我已经使用aspnet_regiis-ir在服务器上重新安装了ASP.NET,但这没有帮助。会话状态在ISS服务器上启用(在Proc中)。我希望这里有人能帮我,因为我一直在努力解决这个问题

非常感谢,并致以亲切的问候

更新:我还用.NET4.0而不是4.5测试了一个ASP.NETMVC4版本,这也有同样的问题。我还部署了一个ASP.NET Web Pages应用程序(.NET 4.0),运行良好(HttpContext.Current.Session在代码隐藏中不为null)


更新II:我还尝试将会话状态存储在数据库中,该数据库在我的开发机器上运行良好,但在生产服务器上存在相同的问题(HttpContext.Session仍然返回null)。

我找到了解决方案。您必须添加和删除SessionStateModel:

  <configuration>
  ...
  <system.webServer>
    ...
    <modules>
      <remove name="Session" />
      <add name="Session" type="System.Web.SessionState.SessionStateModule"/>
      ...
    </modules>
  </system.webServer>
</configuration>

...
...
...

我不知道Microsoft为什么不将此添加到项目模板的web.config中?

我在部署我的应用程序时,以为我的控制器中的
会话
为空,但我错了。结果我错过了兰姆达表情的微妙之处。虽然这不是提问者的解决方案,但这个问答在搜索中排名很高,所以我希望这个答案可以为其他人节省一些时间

我的控制器最初包含如下内容:

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>
This is a simple test
<p>@ViewBag.Info</p>
HostingEnvironment.QueueBackgroundWorkItem(ct => Foo(ct, Bar(Session)));
Bar
是一个从会话获取值的静态方法,它正在抛出一个NRE试图访问其参数。我按如下方式更改了控制器代码,一切正常:

var bar = Bar(Session);
HostingEnvironment.QueueBackgroundWorkItem(ct => Foo(ct, bar));

神秘的是,为什么在我的本地机器上测试时,原始代码始终有效

iis中的会话状态是否已禁用?iis上没有启用任何会话状态,并且设置为InProc会话状态。我寻找此解决方案已有数小时,+1从未发现需要删除和添加此解决方案。可能是MVC4+IIS7的某些特殊性。。。这对我有用+1.