在IIS 7中使用会话时出现错误

5
在将我的网站部署到IIS后,当我尝试访问会话时,出现以下错误消息:
“仅当在配置文件或页面指令中将enableSessionState设置为true时,才可以使用会话状态。还请确保在应用程序配置的section中包含System.Web.SessionStateModule或自定义会话状态模块。”
我在Page_Load或PreRender事件中访问它(我尝试了两个版本)。使用Visual Studio Dev Server没有任何问题。我尝试了InProc和SessionState存储、1个和多个工作进程。我明确地向我的网页添加了enableSessionState =“true”。这是web.config的一部分:
<system.web>
    <globalization culture="ru-RU" uiCulture="ru-RU" />
    <compilation debug="true" defaultLanguage="c#">
        <assemblies>
            <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
            <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
            <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
            <add assembly="System.Web.Extensions.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
            <add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        </assemblies>
    </compilation>
    <pages enableEventValidation="false" enableSessionState="true">
        <controls>
            <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        </controls>
    </pages>
    <httpHandlers>
        <remove verb="*" path="*.asmx" />
        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" />
    </httpHandlers>
    <httpModules>
        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add name="SearchUrlRewriter" type="Synonymizer.SearchUrlRewriter, Synonymizer, Version=1.0.0.0, Culture=neutral" />
        <add name="Session" type="System.Web.SessionStateModule" />
    </httpModules>
    <sessionState cookieless="UseCookies" cookieName="My_SessionId" mode="InProc" stateNetworkTimeout="5" />
    <customErrors mode="Off" />
</system.web>

还有什么需要我做才能使它工作?

我尝试使用Process Monitor监视IIS是否访问aspnet_client文件夹,但没有任何访问记录。


你曾经成功解决了这个问题吗?你还需要帮助吗? - jcolebrand
6个回答

9
解决方案非常奇怪。虽然IIS7在Windows 2008R2的错误描述中说要将SessionStateModule添加到system.web部分,但实际上应该将其添加到system.webServer部分。
<system.webServer>
    <modules>
        <remove name="Session" />
        <add name="Session" type="System.Web.SessionState.SessionStateModule, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
    </modules>
</system.webServer>

这个例子解决了我的问题,但我不明白为什么要添加.NET版本2.0模块?我的应用程序是在.NET 4上创建的。 - To Ka

0
确保“ASP.NET State Service”服务正在运行,然后将其添加到您的web.config文件中。
<sessionState mode="InProc" server="127.0.0.1" port="42424" ... > 

参考:

http://msdn.microsoft.com/en-us/library/ms972429.aspx
http://msdn.microsoft.com/en-us/library/h6bb9cz9(VS.71).aspx

注释:
也许最好手动将端口更改为其他端口。这可以通过regedit完成。

HKLM\Syste\CurrentControlSet\Services\aspnet_state\Parametres\Port -> 42424

更多信息:

http://msdn.microsoft.com/en-us/library/ff648667.aspx


0

你的文件夹结构是什么样的?你是否在更高层级的文件夹中有Web配置文件,可能已经明确禁用了这个功能?

如果可能的话,请重新注册ASP.NET。

Open Control Panel 
  Programs\Turn Windows Features on or off 
    Internet Information Services 
      World Wide Web Services 
        Application development Features 
          ASP.Net <-- check mark here 

参考:如何将ASP.NET 2.0注册到Web服务器(IIS7)?


0

会话应该在一个纯净的、空的应用程序上工作。也就是说,所有默认值都应该起作用。

如果基本测试应用程序无法正常工作,则 IIS 可能已经混淆了您的应用程序。

尝试删除您的 IIS 应用程序。然后创建一个新的虚拟目录,重新启动 IIS,然后再次添加您的应用程序。

此外,请仔细检查您的应用程序的 ASP.Net 设置。确保它设置为正确的 ASP.Net 版本。

在搜索时,我还遇到了...

http://ramonaeid.spaces.live.com/blog/cns!A77704F1DB999BB0!181.entry

希望这有所帮助。

0
这个特定服务器还用于其他事情吗?它是一个Windows 2008服务器和IIS7吗?
我敢打赌你缺少一些IIS的服务器角色,你有没有通过右键单击“计算机”,选择“管理”,进入角色管理(它在计算机管理器的主树上)并检查已安装的IIS位来检查这些?
如果这是IIS6,那么你可能还有其他问题。但我想我们先从简单的东西开始,看看我们能否帮助你解决这个问题。

0
尝试在 web.config 中的 pages 部分添加以下部分:
<namespaces> 
   <add namespace="System.Web.SessionState" />
<namespaces/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接