Программирование >>  Программирование с использованием ajax 

1 ... 202 203 204 [ 205 ] 206 207 208 ... 396


чения позволяют гарантировать, что диск клиента не будет заполнен одними лишь cookie-наборами.

Управление состоянием на стороне сервера

Вместо того чтобы запоминать состояние с помощью клиента, его можно запоминать также и с помощью сервера. Характерным недостатком использования состояния на стороне клиента является возрастающий объем передаваемых по сети данных. Характерным недостатком использования состояния на стороне сервера является то, что сервер вынужден перераспределять ресурсы для своих клиентов. Давайте внимательно рассмотрим способы управления состоянием на стороне сервера.

Состояние сеанса

Состояние сеанса (session) связано с состоянием браузера. Сеанс начинается, когда клиент впервые открывает страницу ASRNET на сервере, и заканчивается, когда клиент не обращается к серверу в течение 20 минут.

Вы можете определить ваш собственный код, который должен выполняться вначале сеанса или при его завершении внутри Global Application Class (Глобальный класс приложения). Чтобы создать Global Application Class, выберите пункт меню Webs 116 =Add New ItemGlobal Application Class (Web-сайтДобавить новый элемент Глобальный класс приложения). С помощью этого класса создается файл global.aspx. Внутри этого файла будут определены некоторые обработчики событий:

<%@ Application Language= C# %> <script runat= server >

void Application Start(Object sender, EventArgs e) { Код, выполняющийся во время запуска приложения.

void Application End(Object sender, EventArgs e) {

Код, выполняющийся во время завершения работы приложения.

void Application Error(Object sender, EventArgs e) {

Код, выполняющийся в случае возникновения необработанных ошибок.

void Session Start(Object sender, EventArgs e) {

Код, выполняющийся при запуске нового сеанса.

void Session End(Object sender, EventArgs e) { Код, выполняющийся при завершении сеанса. Примечание. Событие Session End возникает только тогда, когда режим sessionstate имеет значение InProc в файле Web.config. Если режим сеанса имеет значение StateServer или SQLServer, событие не возникает.

</script>

Состояние сеанса может храниться внутри объекта HttpSessi on State. Доступ к объекту состояния сеанса, который связан с текущим содержимым HTTP, может быть осуществлен посредством свойства Session класса Page. В обработчике событий SessionStart () можно инициализировать переменные сеанса; в примере, показанном ниже, состоянию сеанса mydata присваивается значение 0:

void Session Start(Object sender, EventArgs e) { Code that runs on application startup Session[ mydata ] = 0;



Опять-таки, чтение информации о состоянии сеанса может быть выполнено посредством свойства Session и имени состояния сеанса:

void Buttonl Click (object sender, EventArgs e) {

int val = (int) Session[ mydata ]; Labell.Text = val.ToString (); val += 4;

Session[ mydata ] = val;

Чтобы установить связь между клиентом и его переменными сеанса, по умолчанию ASP.NET использует временный cookie-набор, содержащий идентификатор сеанса. ASP.NET также поддерживает сеансы без cookie-наборов, в которых URL-идентификаторы используются для отображения HTTP-запросов в виде того же сеанса.

Состояние приложения

Если данные необходимо разделять между разными клиентами, то в этом случае можно использовать состояние приложения (application). Состояние приложения может применяться примерно так же, как и состояние сеанса. В этом случае используется класс HttpApplicationState, доступ к которому может осуществляться через свойство Application класса Page.

В примере, показанном ниже, инициализируется переменная приложения userCount во время запуска Web-приложения. Когда происходит первый запуск страницы ASP.NET Web-сайта, вызывается метод обработчика события ApplicationStart () в файле global. asax. Эта переменная используется для подсчета каждого пользователя, осуществляющего доступ к Web-сайту:

void Application Start(Object sender, EventArgs e) { Code that runs on application startup implication[ userCount ] = 0;

В обработчике события SessionStart () происходит приращение значения переменной приложения userCount. Прежде чем изменять переменную приложения, необходимо заблокировать объект приложения посредством метода Lock(); в противном случае могут возникнуть проблемы с работой потоков, поскольку множество клиентов могут одновременно обращаться к переменной приложения. После того как будет изменено значение переменной приложения, необходимо вызвать метод Unlock О . Следует иметь в виду, что время между блокированием и снятием блокировки ограничено очень коротким промежутком - вам не следует производить чтение файлов или данных из базы данных в течение этого времени. В противном случае другие клиенты должны будут ожидать, пока не будет завершен доступ к данным.

void Session Start(Object sender, EventArgs e) {

Код, который выполняется во время начала нового сеанса. Application.Lock();

Application[ userCount ] = (int)Application[ userCount ] + 1; Application.UnLock();

Чтение данных из состояния приложения не представляет никакой сложности и производится точно так же, как и в случае с состоянием сеанса:

Labell.Text = Application[ userCount ].ToString ();



Не следует хранить слишком большой объем данных в состоянии приложения, поскольку для состояния приложения необходимы ресурсы сервера до тех пор, пока сервер не будет остановлен или перезапущен.

Состояние кэша

Кэш (cache) - это состояние на стороне сервера, которое похоже на состояние приложения в том смысле, что оно разделяется между всеми клиентами. Состояние кэша отличается от состояния приложения тем, что кэш является более гибким: для определения недействительности состояния можно воспользоваться несколькими способами. Вместо того чтобы производить чтение файла с каждым запросом или читать данные из базы, данные можно хранить в кэше.

Для работы с кэшем необходимы пространства имен System.Web.Caching и класс Cache. Пример добавления объекта в кэш показан в следующем примере:

Cache.Add( mycache , myobj, null, DateTime.MaxValue, TimeSpan. FromMinutes(10), CacheltemPriority.Normal, null);

Класс Page имеет свойство Cache, которое возвращает объект Cache. С помощью метода Add () класса Cache можно поместить любой объект в кэш. Первый параметр метода Add () определяет имя элемента кэша. Второй параметр определяет объект, который необходимо поместить в кэш. Если в файл вносятся какие-либо изменения, осуществляется проверка объекта кэша. В приведенном нами примере такой зависимости нет, поскольку этот параметр имеет значение null.

С помощью четвертого и пятого параметров можно задать промежуток времени, в течение которого элемент кэша будет считаться действительным. Четвертый параметр определяет абсолютное время, при котором элемент кэша будет считаться недействительным, в то время как пятый параметр требует скользящее время: элемент кэша будет считаться недействительным, если доступ к нему не производился в течение указанного периода времени. В нашем примере используется скользящий временной промежуток: если доступ к элементу кэша не производился в течение 10 минут, он становится недействительным.

Шестой параметр определяет приоритет кэша. CacheltemPriority - это перечисление для настройки приоритета кэша. Если рабочий процесс ASRNET потребляет большой объем памяти, исполняющая среда ASRNET будет удалять элементы кэша в соответствии с их приоритетом. Первыми будут удалены элементы, имеющие низкий приоритет. С помощью последнего параметра можно определить метод, который будет вызываться при удалении элемента кэша. Примером ситуации, в которой будет использоваться этот метод, является случай, когда кэш зависит от работы файла. Если в файле происходят изменения, удаляется элемент кэша и вызывается обработчик события. С помощью обработчика события можно перезагрузить кэш, прочитав файл еще раз.

Чтение элементов кэша может осуществляться посредством индексатора, с которым вы уже встречались при рассмотрении состояния сеанса и приложения. Прежде чем использовать объект, возвращенный свойством Cache, всегда следует проверять, является ли результат равным null, что встречается в случае, если кэш является недействительным. Если значение, возвращенное индексатором Cache, не равно null, возвращенный объект можно привести к типу, который использовался для хранения элемента кэша:

object о = Cache[ mycache ];

if (о == null)

Перегрузка кэша.



1 ... 202 203 204 [ 205 ] 206 207 208 ... 396

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика