Китай |
Управление состоянием страниц на клиенте
Упражнение 11. Хранение данных в состоянии приложения
Состояние приложения - это область памяти сервера, выделяемая при запуске приложения для хранения глобальных данных, доступных с любой страницы приложения. На эти данные в каждой странице ссылается объект-словарь Application типа System.Web.HttpApplicationState. Как и при состоянии сеанса, состояние приложения хранит данные в виде объектов, поэтому при их извлечении необходимо явное преобразование типов.
Данные состояния приложения существуют в течение всего периода работы приложения и теряются при перезапуске сервера или перехода приложения в новый домен. Для обеспечения целостности данных в состоянии приложения перед их обновлением необходимо обеспечивать монопольный доступ страницы, заставляя обращения других страниц становиться в очередь. Это существенно снижает производительность работы, поэтому состояние приложения используется редко и заменяется другими способами хранения межстраничной информации.
В качестве примера построим две страницы, в которых подсчитывается общее число посещений сайта с момента запуска приложения.
<?xml version="1.0" encoding="utf-8"?> <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <system.web> <compilation debug="true" /> <sessionState cookieless="true" regenerateExpiredSessionId="true" /> </system.web> </configuration>Листинг 35.24. Файл web.config с включенным режимом Cookieless
<%@ Application Language="C#" %> <script runat="server"> void Application_Start(object sender, EventArgs e) { this.Application["clicks"] = (int)0; } </script>Листинг 35.25. Файл Global.asax
- Создайте страницу без отделенного кода с именем ApplicationState1.aspx, назначьте ее стартовой и заполните так
<%@ Page Language="C#" %> <script runat="server"> protected void Page_Load(object sender, EventArgs e) { // Читаем без проверки - инициализирована в global.asax int visit = (int)this.Application["clicks"] + 1; // Обновляем состояние приложения с блокировкой this.Application.Lock(); this.Application["clicks"] = visit; this.Application.UnLock(); // Создаем текстовую метку Label label = new Label(); form1.Controls.Add(label); label.Text = "Сегодня вы посетили нас в " + visit.ToString() + " раз!<br />"; // Создаем гиперссылку HyperLink link = new HyperLink(); form1.Controls.Add(link); link.NavigateUrl = "~/ApplicationState2.aspx"; link.Text = "На другую страницу..."; } </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> </form> </body> </html>Листинг 35.26. Файл ApplicationState1.aspx
- Создайте копию для страницы ApplicationState1.aspx с именем ApplicationState2.aspx и поменяйте в ней гиперссылку на ApplicationState1.aspx, чтобы страницы ссылались друг на друга
- Запустите само приложение несколько раз и пощелкайте по ссылкам чтобы убедиться, что счетчик количества визитов увеличивается
- В панели задач нижней части экрана щелкните правой кнопкой мыши на пиктограмме тестового сервера и остановите его командой Stop
- Вновь запустите страницу ApplicationState1.aspx, чтобы убедиться, что счетчик сбросился в начальное значение