代码之家  ›  专栏  ›  技术社区  ›  flashnik

在IIS 7中使用会话时出错

  •  5
  • flashnik  · 技术社区  · 14 年前

    将网站部署到IIS后,尝试访问会话时收到以下错误消息:

    会话状态只能在以下情况下使用 EnableSessionState设置为true, 在配置文件中或在 page指令。请也做 当然 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>
    

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

    我试图监视IIS是否访问 aspnet_client 文件夹 Process Monitor 没有任何访问权限。

    6 回复  |  直到 12 年前
        1
  •  9
  •   flashnik    14 年前

    解决办法很奇怪。尽管错误描述中的iis7 jn windows 2008r2说要将sessionstatemodule添加到 网络系统 节,应将其添加到 System.Web服务器 部分。

    <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>
    
        2
  •  0
  •   kervin    14 年前

    会话应该在一个普通的空应用程序上工作。也就是说,所有默认值都应该有效。

    如果它不适用于基本测试应用程序,那么IIS可能会与您的应用程序混淆。

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

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

    搜索的时候,我也碰到了…

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

    希望有帮助。

        3
  •  0
  •   Aristos    14 年前

    确保服务名称” ASP.NET状态服务 “正在运行,然后将其添加到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\syse\currentcontrolset\services\aspnet\u state\parameters\port -gt;42424

    更多信息:

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

        4
  •  0
  •   jcolebrand    14 年前

    这个特定的服务器还用于其他用途吗?它是Windows 2008服务器和iis7吗?

    我敢打赌,您丢失了一些用于IIS的服务器角色,是否通过右键单击“计算机”,选择“管理”,转到“角色管理”(位于“计算机管理器”的主树上)并检查IIS的安装位来检查这些角色?

    如果这是II6,那么您可能还有其他问题。但我想我们将从一些简单的事情开始,看看我们是否能帮你解决这个问题。

        5
  •  0
  •   Community Bayu Bramantya    7 年前

    你的文件夹结构是什么?是否在更高的文件夹中有明确禁用此功能的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 
    

    裁判: How to register ASP.NET 2.0 to web server(IIS7)?

        6
  •  0
  •   Thea Ray Suelzer    14 年前

    尝试在web.config的pages节中添加以下节:

    <namespaces> 
       <add namespace="System.Web.SessionState" />
    <namespaces/>