| Китай |
Управление состоянием страниц на клиенте
Упражнение 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,
чтобы убедиться, что счетчик сбросился в начальное значение


