Назад | Перейти на главную страницу

Перезагрузка домена приложений IIS 7.5 приводит к потере сеанса после добавления виртуального каталога на «веб-сайт по умолчанию»

Я надеюсь, что вы можете мне помочь здесь, потому что я пытался получить некоторые ответы уже на другой доске (посмотреть здесь) Этот вопрос основан на ответе Скотта Форсайта Вот.

При добавлении нового виртуального каталога на «веб-сайт по умолчанию» в диспетчере IIS все другие приложения, расположенные на веб-сайте по умолчанию, каким-то образом повторно используются. Чтобы упростить мою проблему, я взял пример, в котором я мог отслеживать метку времени текущего сеанса, и понял, что информация о сеансе действительно теряется после добавления виртуального диска, что означает переработку домена приложения.

Вот такая ситуация:

Места

Default Web Site

    1 (virtual directory) (d:\TestAppDomains\1\)

       - app1 (Application)           (using App Pool 1)

    2 (virtual directory) (d:\TestAppDomains\2\)

       - app2 (Application)           (using App Pool 2) 

Насколько я понял, добавление виртуального каталога просто вносит изменения в applicationHost.config, что не должно вызывать повторное использование доменов приложений. Может быть, это проблема делегирования, но, думаю, мне этого недостаточно, чтобы понять :(

Есть ли какие-либо свойства, влияющие на это поведение? Я уже установил в настройках AppPool режим запрета повторного использования после изменения конфигурации, но это не помогло.

Я был бы ДЕЙСТВИТЕЛЬНО признателен, если бы вы помогли мне с этим, потому что я борюсь с этим уже почти 6 месяцев.

Конечно, я с радостью предоставлю дополнительную информацию, если она вам понадобится.

Обновление 1:

HealthMonitoring не может мне помочь по двум причинам:

  1. Не удается найти запись для утилиты AppPool, где она должна быть? Просмотр событий -> Журналы Windows / Журналы приложений и служб? (Должен быть настроен правильно)
  2. Может я что-то не так понял. Сначала я подумал, что это переработка пула приложений, но с помощью упрощенного теста я создаю пример без каких-либо приложений и дополнительных пулов приложений. Теперь это выглядит так:

Места

Default Web Site

    1 (virtual directory) (d:\TestAppDomains\1\)          
           session1.aspx (Sets current timestamp to session variable and redirects to session2.aspx)
           session2.aspx (displays session variable)

Вызывая localhost / 1 / sessions1.aspx, я могу увидеть метку времени. После добавления второго виртуального каталога (например, «2» (d: \ TestAppDomains \ 2)) и обновления страницы сеанс пропадает, что означает, что переменная равна нулю.

Привет, Адам

У меня была такая же ситуация, как вы описали на Форум IIS: один веб-сайт, несколько пулов приложений, несколько пар приложений (веб-сервис) и виртуальных каталогов (html + js), автоматическое развертывание и так далее.

Проблема была такая же: когда я добавил / удалил виртуальный каталог, все приложения перезапустились. Это не было хорошо, так как я планировал обслуживать несколько версий и хотел, чтобы пользователи работали, пока новая версия будет развернута.

Я безуспешно играл с делегированием настроек. Затем я заметил, что добавление / удаление одного приложения не привело к перезапуску других.

Итак, вот решение: создать для веб-страниц отдельное приложение вместо виртуального каталога.

Если у вас есть ASP.NET домен приложения перезапуска, причины подробно описаны здесь:

https://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.asp

У вас есть пул приложений повторное ведение журнала событий включено? Это было бы первое, с чего я бы начал:

Если у вас есть приложение ASP.NET, вы также можете включить HealthMonitoring в разделе system.web файла web.config. Эти параметры регистрации могут быть полезны при определении того, что происходит. Образец:

  <system.web>
    <healthMonitoring enabled="true" heartbeatInterval="1">    
      <rules>
        <add name="HeartBeat" 
             eventName="Heartbeats" 
             provider="EventLogProvider" 
             profile="Default" 
             minInstances="1"
             minInterval="00:01:00"
             maxLimit="Infinite"/>
        <add name="App Lifetime"
             eventName="Application Lifetime Events"
             provider="EventLogProvider"
             profile="Default"
             minInstances="1" 
             minInterval="00:00:00"
             maxLimit="Infinite"/>
      </rules>
    </healthMonitoring>

Часто задаваемые вопросы - мониторинг работоспособности в ASP.NET 2.0
http://forums.asp.net/t/1027461.aspx/1

Элемент healthMonitoring (схема параметров ASP.NET)
http://msdn.microsoft.com/en-us/library/2fwh2ss9%28v=vs.100%29.aspx