Error using session in IIS 7

2019-02-14 02:06发布

问题:

After deployment of my website to IIS, I'm getting the following error message when trying to access a session:

Session state can only be used when enableSessionState is set to true, either in a configuration file or in the Page directive. Please also make sure that System.Web.SessionStateModule or a custom session state module is included in the \\ section in the application configuration.

I access it in Page_Load or PreRender events (I tried both versions). With Visual Studio Dev Server it works without a problem. I tried both InProc an SessionState storage, 1 and multiple worker processes. I added a enableSessionState = "true" to my webpage explicitly. Here is part of 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>

What else do I need to do to make it work?

I tried to monitor if IIS accesses the aspnet_client folder with Process Monitor and didn't get any access.

回答1:

The solution happened to be very curious. Though IIS7 jn WIndows 2008R2 in error description says to add SessionStateModule to system.web section, it should be added to system.webServer section.

<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:

Sessions should work on a plain, empty application. That is, all the default values should work.

If it's not working with basic test applications, then IIS may have got confused with your application.

Try deleting your IIS application. Then create a new virtual directory, restart IIS, and then add your application again.

Also, double check your application's ASP.Net settings. Make sure it's set to the correct version of ASP.Net.

While searching, I also ran into...

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

Hope that helps.



回答3:

Make sure that the service names "ASP.NET State Service" is running and then add this to your web.config.

<sessionState mode="InProc" server="127.0.0.1" port="42424" ... > 

Reference:

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

Comment:
Maybe is better to manual change the port to something else. This can be done with regedit.

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

Some more infos:

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



回答4:

Has this particular server been used for anything else? Is it a Windows 2008 server and IIS7?

I'm willing to bet that you're missing some server roles for IIS, have you checked those by right clicking "Computer", choosing "Manage", going to the roles management (it's on the primary tree in computer manager) and checking the installed bits for IIS?

If this is IIS6 then you may have other concerns. But I figure we'll start with something simple, see if we can't help you figure this one out.



回答5:

What is your folder structure. Do you have web configs at a higher folder that may have explicitly disabled this?

If possible, reregister 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 

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



回答6:

Try adding in pages section in web.config the following section:

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