Состояние приложения под .Net 4.0 и IIS7 не работает - PullRequest
1 голос
/ 27 ноября 2011

Я разрабатывал веб-приложение ASP.Net 4.0 и использовал класс HttpApplicationState со свойством Contents, чтобы установить некоторые переменные в событии Application_Start файла Global_asax.

Хотя приложение работает, как и ожидалось, на моем компьютере разработчика, когда оно развернуто на производственном сервере с IIS7, значения, возвращаемые для переменных состояния приложения, равны нулю. Я пробовал различные методы кода, такие как использование HttpContext, Runtime.Cache, Application ["key"] и Application.Contents.Add ["key", Value], но все безуспешно. Теперь мне интересно, должна ли быть специальная конфигурация на IIS7 для этого; исследуя тему, я вижу, что люди говорят, что пул приложений, в котором выполняется приложение, должен обслуживаться только одним рабочим процессом; Я не эксперт по IIS7, но, выбрав пул приложений и просмотрев его расширенные свойства, я вижу, что пул настроен так, чтобы иметь максимум 1 рабочий процесс, поэтому я считаю, что это должно охватывать его. Я потратил на это два добрых дня, поэтому, если кто-то знает об этой проблеме, пожалуйста, помогите!

спасибо

1007 * Крис *

Ответы [ 2 ]

1 голос
/ 04 декабря 2011
  1. HttpContext.Current.Application доступно в IIS 6 и 7, в интегрированном или классическом режиме.

  2. Событие Application_Start в global.asax также называетсяво всех средах.

  3. При запуске IIS 7+ в интегрированном режиме обработчики событий в global.asax применяются только к запросам, сопоставленным с обработчиком ASP.NET (объекты, полученные изКласс страницы).Настраиваемые модули HttpModules применяются ко всем запросам.

  4. Состояние приложения или любые другие статические переменные не передаются из одного экземпляра IIS в другой - поэтому настройки в одном AppPool или рабочем процессе не отображаются.не видны в других.

  5. Параметры состояния приложения и статические переменные после инициализации теряются при сбросе AppPool (хотя вы также получите новое событие Application_Start).Это верно независимо от того, происходит ли сброс из-за простоя работника или для обычных ежедневных сбросов.

  6. Вместо использования HttpApplicationState лучше создать собственный статический класс со статическими свойствами длянастройки всего приложения.Таким образом, ваши обращения строго типизированы, имеют Intellisense и не подвержены ошибочным написанию ключевых строк.

  7. Независимо от того, используете ли вы собственный статический класс или HttpApplicationState, обязательно установите блокировку передчтение настройки, когда вы также можете изменить ее.Вы можете использовать HttpApplicationState.Lock (), если решите придерживаться этого подхода.

Вы можете попробовать запустить приложение под IIS Express локально, или даже IIS 7 (Vista) или 7.5 (W7), чтобы помочь отладить вашу проблему.На этом этапе Кассини устарела;Я бы не использовал его как можно больше.

0 голосов
/ 27 ноября 2011

Возможно, у вас неправильный режим пула приложений.

Пулы приложений IIS 7 имеют 2 режима: классический и интегрированный. Увидеть. http://weblogs.asp.net/jgaylord/archive/2008/09/04/iis7-integrated-mode-and-global-asax.aspx

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