Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Поддержка данных состояния приложения
Поддержка данных состояния приложения
Тип HttpApplicationState предоставляет возможность совместного использования глобальной информации для множества сеансов в приложении ASP.NET. Например, можно иметь одну строку соединения, используемую всеми страницами приложения, один общий тип DataSet, используемый множеством страниц, или любой другой фрагмент данных, доступ к которому требуется обеспечить на уровне всего приложения. Описания основных членов типа HttpApplicationState предлагаются в табл. 24.3.
Таблица 24.3. Члены типа HttpApplicationState
Члены | Описание |
---|---|
AllKeys | Свойство, возвращающее массив типов System.String, представляющих все имена в рамках типа HttpApplicationState |
Count | Свойство, возвращающее значение числа объектов в типе HttpApplicationState |
Add() | Метод, позволяющий добавить новую пару "имя-значение" в тип HttpApplicationState. Этот метод используется достаточно редко, поскольку предпочтение обычно отдается индексатору класса HttpApplicationState |
Clear() | Метод, удаляющий все элементы из типа HttpApplicationState. Функционально эквивалентен методу RemoveAll() |
Lock() Unlock() | Эти два метода используются тогда, когда требуется изменить набор переменных приложения в реентерабельной форме |
RemoveAll() Remove() RemoveAt() | Эти методы удаляют конкретный элемент типа HttpApplicationState (по имени строки или, как RemoveAt(), с помощью числового индексатора) |
Для создания членов-данных, которые должны быть доступны всем активным сеансам, нужно создать множество пар имен и значений. В большинстве случаев наиболее подходящим для этого местом является обработчик события Application_Start() типа, производного от HttpApplication, например:
void Application_Start(Object sender, EventArgs e) {
// Установка некоторых переменных приложения.
Application["SalesPersonOfTheMonth"] = "Chucky";
Application["CurrentCarOnSale"] = "Colt";
Application["MostPopularColorOnLot"] = "черный";
}
В течение всего времени существования Web-приложения (т.е. пока Web-приложение не будет закрыто вручную или пока не истечет время ожидания последнего пользователя) любой пользователь (на любой странице) при необходимости может получить доступ к этим значениям. Предположим, что у вас есть страница, которая по щелчку мыши должна отображать в поле Label информацию об автомобиле, предлагаемом со скидкой в данный момент.
protected void btnShowCarDiscunt_Click(object Sender, EventArgs e) {
// Возвращаемый System.Object следует преобразовать
// в System.String!
lblCurrCarOnSale.Text = (string)Application["CurrentCarOnSale"];
}
Как и в случае свойства ViewState, обратите внимание на то, что вы должны преобразовать значение, возвращаемое типом HttpApplicationState, в подходящий тип. Поскольку тип HttpApplicationState может содержать любой тип, должно быть очевидно, что в рамках данных состояния приложения узла вы можете размещать пользовательские типы (и вообще любые типы .NET).
Для примера использования этой возможности создайте новое Web-приложение ASP.NET с названием AppState. Предположим, что требуется поддерживать три текущие переменные приложения в рамках строго типизованного объекта с именем CarLotlInfo.
public class CarLotInfo {
public CarLotInfo(string s, string c, string m) {
salesPersonOfTheMonth = s;
currentCarOnSale = c;
mostPopularColorOnLot = m;
}
// Открыты для простоты доступа.
public string salesPersonOfTheMonth;
public string currentCarOnSale;
public string mostPopularColorOnLot;
}
С этим вспомогательным классом вы можете сначала изменить обработчик события Application_Start() так, как предлагается ниже:
protected void Application_Start(Object sender, EventArgs e)
// Размещение пользовательского объекта
// в секторе данных приложения.
Application["CarSiteInfo"] = new CarLotInfo("Chucky", "Colt" "черный");
}
а затем получить доступ к соответствующей информации с помощью открытых полей данных в обработчике событий сервера.
protected void btnShowAppVariables_Click(object sender, EventArgs e) {
CarLotInfo appVars = ((CarLotInfo)Application["CarSiteInfo"]);
string appState = string.Format("‹li›Предлагаемая машина: [0]‹/li›", appVars.currentCarOnSale);
appState += string.Format("‹li›Наиболее популярный цвет: {0}‹/li›", appVars.mostPopularColorOnLot);
appState += string.Format ("‹li›Наиболее успешный продавец: {0}‹/li›", appVars.salesPersonOfTheMonth);
lblAppVariables.Text = appState;
}
Открыв сейчас эту страницу, вы обнаружите, что в поле типа Label страницы отображаются строки каждой из переменных приложения.
- Глава 7. Поддержка постоянного хранения в MIDP
- Поддержка постоянного хранения устройством
- Поддержка данных состояния Web-сервисов с помощью свойства EnableSession
- Резервное копирование базы данных InterBase
- Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
- Резервное копирование многофайловых баз данных
- Восстановление из резервных копий многофайловых баз данных
- Владелец базы данных
- ЧАСТЬ IV. База данных и ее объекты.
- Перевод базы данных InterBase 6.x на 3-й диалект
- Типы данных для работы с датой и временем
- Практическая работа 53. Запуск Access. Работа с объектами базы данных