Могут ли несколько пользователей совместно использовать экземпляр HttpApplication?

Я использовал таблицу вверху этой статьи в качестве справки. . У меня три вопроса:

1. Могут ли несколько пользователей (из разных физических местоположений) совместно использовать экземпляр HttpApplication? Если да, то происходит ли это по умолчанию?

2. Могут ли несколько пользователей (из разных физических местоположений) совместно использовать экземпляр HttpApplicationState? Если да, то происходит ли это по умолчанию?

3. Могут ли несколько пользователей приложения ASP.NET совместно использовать экземпляр singleton или значение статической переменной? Если да, то происходит ли это по умолчанию?

Спасибо, что прояснили это.


person smartcaveman    schedule 06.03.2011    source источник


Ответы (2)


Ответ на все шесть ваших вопросов - да.

Состояние каждого пользователя должно храниться в Session.

person SLaks    schedule 06.03.2011
comment
Да, я уверен. HttpApplication — это глобальное состояние. - person SLaks; 06.03.2011
comment
Спасибо. Оказывается, я делал пару вещей очень и очень неправильно, и теперь я понимаю, почему. - person smartcaveman; 06.03.2011

HttpApplication содержит состояние приложения Asp.Net для каждого экземпляра w3svc.exe. Таким образом, для каждого веб-сервера в вашем приложении сохраняется состояние приложения. Если вы используете веб-садоводство, есть и другие проблемы с объектом HttpApplication.

Все пользователи на одном сервере в одном потоке будут совместно использовать значения HttpApplication, HttpApplicationState и всех статических переменных. Когда на сервере запущено несколько экземпляров HttpApplication, одновременные пользователи не будут получать доступ к одному и тому же экземпляру этих объектов. Я НЕ рекомендую хранить значения в этих объектах... гораздо лучше использовать объект Cache для хранения значений, которыми вы хотите поделиться между пользователями на сервере.

Кэшировать объект

Объект Cache может принимать зависимости и значения времени истечения... это позволит вам контролировать «свежесть» значений, которые вы храните на сервере.

Значения для каждого пользователя должны храниться в объекте Session.

Объект сеанса

person Jeff Fritz    schedule 06.03.2011
comment
Под всеми пользователями на одном сервере вы подразумеваете всех пользователей, обращающихся к одному и тому же серверу? Кроме того, где я могу найти документацию о w3svc.exe? - person smartcaveman; 06.03.2011
comment
Если вы используете среду веб-фермы, у вас может быть несколько пользователей на одном веб-сервере и несколько пользователей на другом. HttpApplication НЕ обменивается данными между машинами. - person Jeff Fritz; 06.03.2011
comment
+1, спасибо за ваш ответ. Это очень полезно, но я чувствую, что SLaks ответил на актуальный вопрос наиболее прямо и лаконично. - person smartcaveman; 06.03.2011
comment
np.. просто хотел убедиться, что у вас есть некоторый контекст для того, какие другие параметры были доступны при попытке сохранить и получить доступ к переменным между сеансами пользователя в Asp.Net - person Jeff Fritz; 06.03.2011
comment
@JeffFritz Поддерживается ли состояние HttpApplication при объединении на одном сервере? Потому что я читал, что ASP.NET фактически управляет пулом объектов HttpApplication для обслуживания запросов. Здесь: msdn.microsoft.com/en- us/library/a0xez8f2%28v=vs.71%29.aspx - person Ghasan غسان; 29.08.2014
comment
Да, @Ghasan, вы правильно понимаете, что IIS может создать несколько HttpApplications. Он создает столько, сколько необходимо для управления одновременными запросами к серверу, и это число может находиться в диапазоне от 1 до 100. Дополнительную информацию об экземплярах HttpApplication можно найти по адресу: support.microsoft.com/default.aspx?scid=kb;en-us;312607 - person Jeff Fritz; 01.09.2014
comment
Я использовал HttpContext.Current.Application, но похоже, что .Cache будет лучше. Один вопрос, как принудительно очистить весь кеш? - person lathomas64; 28.10.2015
comment
По-видимому, stackoverflow.com/a/16532197/387191 — это правильный путь. Извините за двойной комментарий, я не видел способа отредактировать свой первый. - person lathomas64; 28.10.2015