Ошибка использования сеанса в IIS 7 - PullRequest
5 голосов
/ 03 мая 2010

После развертывания моего сайта в IIS при попытке получить доступ к сеансу появляется следующее сообщение об ошибке:

Состояние сеанса можно использовать только тогда, когда enableSessionState имеет значение true, либо в файле конфигурации, либо в Директива страницы. Пожалуйста, также сделайте уверен, что 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 ]

9 голосов
/ 09 июня 2010

Решение оказалось очень любопытным. Хотя в IIS7 jn 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>
0 голосов
/ 12 мая 2010

Попробуйте добавить в раздел страниц в web.config следующий раздел:

<namespaces> 
   <add namespace="System.Web.SessionState" />
<namespaces/>
0 голосов
/ 12 мая 2010

Какова ваша структура папок. У вас есть веб-конфиги в более высокой папке, в которых это явно отключено?

Если возможно, перерегистрировать 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: Как зарегистрировать ASP.NET 2.0 на веб-сервере (IIS7)?

0 голосов
/ 12 мая 2010

Этот конкретный сервер использовался для чего-то еще? Это сервер Windows 2008 и IIS7?

Готов поспорить, что вам не хватает некоторых ролей сервера для IIS. Вы проверили их, щелкнув правой кнопкой мыши «Компьютер», выбрав «Управление», перейдя к управлению ролями (оно находится в основном дереве в диспетчере компьютеров ) и проверка установленных битов для IIS?

Если это IIS6, у вас могут быть другие проблемы. Но я полагаю, что мы начнем с чего-то простого, посмотрим, сможем ли мы помочь вам разобраться с этим.

0 голосов
/ 07 мая 2010

Убедитесь, что служба с именами « 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 \ Parameterres \ Port -> 42424

Еще немного информации:

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

0 голосов
/ 05 мая 2010

Сессии должны работать на простом, пустом приложении. То есть все значения по умолчанию должны работать.

Если он не работает с базовыми тестовыми приложениями, возможно, IIS перепутал ваше приложение.

Попробуйте удалить приложение IIS. Затем создайте новый виртуальный каталог, перезапустите IIS и снова добавьте приложение.

Кроме того, дважды проверьте настройки ASP.Net вашего приложения. Убедитесь, что установлена ​​правильная версия ASP.Net.

При поиске я тоже наткнулся на ...

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...