Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

В девятом выпуске рассылки '.Net Собеседник' вы можете познакомиться с обзором


Информационный Канал Subscribe.Ru

.Net Собеседник #9

Содержание
  1. От автора
  2. Обзор новостей
  3. Управление состоянием в веб-формах 
  4. Время кода - Таинственные сессии и их события
  5. Форумы .Net на www.sql.ru

От автора

Здравствуйте, коллеги!

Есть у меня один проект на ASP.NET , которого я не касался уже с полгода – закончил, работает себе и ладно. Но тут срочно понадобилось внести кое-какие исправления, я открыл его и начал работу. Каково же было моё удивление, когда после первой же компиляции я получил невнятное сообщение об ошибке – Parser error – было написано большими красными буквами, ошибка была в строке
<iewc:TreeView id="tvMain" runat="server"></iewc:TreeView> (это тыг компоненты TreeView из набора IE Web Controls)
В расшифровке было написано: Attempt to access the method failed.
Прекрасно. К какому методу ‘failed’ доступ было не ясно, поэтому я начал с проверки наличия установленных IE Web Controls – они были на месте и прекрасно себя чувстовали. Тем не менее, я решил их переустановить, что и было успешно сделано. Однако, на ход событий это не повлияло. Замечу, что проект изначально разрабатывался под Visual Studio 2002, а потом был перенесен под VS.Net 2003.
Затем я переключился из кода в дизайнер aspx-страницы – элемент управления TreeView был на месте и никакой ошибки его создания не было. Тут набор моих идей иссяк, и я решил обратиться к сокровищнице знаний – Интернету. Там было несколько подобных ошибок (по-крайней мере, внешне) и они меня сбили с пути истинного ещё где-то на час. С течением времени, пока я пробовал то один вариант, то другой, количество их уменьшалось, а лучше не становилось. Благо настроение было в этот день флегматичное, и перебор различных вариантов решения меня не утомлял. В итоге, перебрав практически все найденные версии, я заметил, что страница с ошибкой содержит одну очень интересную строчку, указывающую на то, что VS.Net использует для компиляции приложения .Net Framework версии 1.2 , который был поставлен вместе с VS.Net Whidbey :) Это была та самая Эврика, которую старик Архимед поймал, погрузившись в свою ванну.
После деинсталляции фреймворка 1.2 работоспособность приложения была восстановлена.
Но на этом сюрпризы не закончились – на следующий день я попытался продолжить работу над своим текущим проектом, однако, при открытии aspx-файлов вылетала ошибка – не найдена сборка или библиотека EnvDTE. Это меня несколько расстроило, однако ненадолго. На этот раз, с помощью интернета, я быстро вышел на верный путь – оказалось, что в каталоге ‘С:\Program Files\Microsoft Visual Studio.NET\Common7\IDE’ отсутствуют файлы envdte.dll и CustomMarshalers.dll, которые можно было найти в каталоге ‘C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\’. После копирования этих файлов в первый каталог всё заработало.
Вот такие вот побочные эффекты, связанные со знакомством MS Visual Studio Whidbey.

В прошлом номере была допущена досадная ошибка со ссылкой на рассылку, автором которой является Александр Гладченко - 'MS SQL Server - дело тонкое...' - исправляюсь.

Теперь в конце обзора новостей постараюсь помещать информацию о новых статьях в Microsoft Knowledge Base, касающихся .Net и C#.

Кроме того, хочу отрекомендовать вам рассылку об одном из родственников языка C# - языке C. Ниже - форма быстрой подписки.

"9899"
Полный справочник по языку Си
Первая русскоязычная справочная публикация по языку Си
такого уровня, ориентированная на опытных программистов,
ИТ-менеджеров и технических директоров.
Большую часть публикаций составляют сведения, которые
практически невозможно найти в обычных справочниках. Особый
акцент делается на освещении места и роли языка в индустрии
программного обеспечения. Многое из публикуемого в рассылке
имеет непосредственное отношение к языку Си++.
Мгновенная подписка
    

На этом всё - желаю интересного чтения.

{К содержанию}

Обзор новостей

  1. Вышел DotNetBar Suite 3.6
    DevComponents LLC объявила о выходе DotNetBar Suite 3.6. В новый выпуск добавлена многофункциональная панель с тремя предопределёнными стилями, поддержка цветовых схем, градиентный фон и поддержка различных состояний мыши. DotNetBar Suite включает различные меню, панели инструментов, плавающие окна, боковые панели, панели с закладками, панели проводника, а также другие элементы управления – всё с поддержкой тем для Office 2003, XP, 2000 и Windows XP. DotNetBar – на 100% совместимый с .NET компонент. На веб-сайте присутствует пробная версия.
  2. ActiveUp выпустила ActiveMail V1.8
    Active Mail – это набор .NET компонент, позволяющий пользователю отсылать электронную почту согласно заданных шаблонов или почту, привязанную к неким данным, получать и разбирать сообщения с использованием нескольких протоколов, таких, как SMTP, IMAP4, POP3 и NNTP. Доступно формирование почтовых очередей. Также поддерживается расширенное слияние почты
  3. Новая книга: Программирование Crystal Reports .NET
    23 Марта вышла книга Брайна Бишофа "Crystal Reports .NET Programming". Книгу можно заказать на сайте www.crystalreportsbook.com (3/23) или www.amazon.com на (4/1). Для ознакомления доступна электронная книга с несколькими главами из бумажного издания.
  4. Компонент Apoc PDF
    Компонент Apoc PDF позволит разработчику манипулировать существующими документами PDF и создавать новые документы PDF. Разработанный на платформе Microsoft .NET этот компонент совместим с любым .NET-приложением - ASP.NET, приложением Windows и консольными приложениями.
  5. ComponentOneВ объявляет о поддержке INETA
    ComponentOne LLC объявила о поддержке Интернациональной .Net Ассоциации (International .NET Association - INETA), путём специального предложения для её членов. Члены INETA могут подписаться на ComponentOne Studio Enterprise 2004 v1 и бесплатно стать подписчиками журнала ‘MSDN Magazine’.
  6. MiddTec перебросила мост от CORBA к платформе Microsoft .NET
    Новая технология компании MiddTec способствует интеграции в мир .NET. Разработка и среда MiddCor.NET позволят пользователям задействовать приложения CORBA – вскоре пополнящимися приложениями J2EE – в инфраструктуре .NET. MinCor.NET предлагает идеальное решение для встраивания новой периферии (смартфонов и PDA) в корпоративную инфраструктуру .NET и CORBA, базирующуюся на ОС Windows.
  7. Выпуск Yukon и Whidbey откладывается
    Выпуск Yukon и Whidbey отложен на первую половину 2005 года. Также объявлены официальные названия продуктов - Yukon будет называться SQL Server 2005, а Whidbey - Visual Studio 2005. Напомню, что Yukon собирались выпустить в 2003 году.
  8. Глава Programming Yukon: The Inproc Managed Provider
    Эта глава, взятая из книги ‘Programming Yukon Book-In-Review’ посвящена Inproc Managed Provider, новому набору классов для доступа к данным версии SQL Server’a Yukon. Inproc Managed Provider представляет классы из пространства имён System.Data.SqlServer и предназначен для доступа к данным изнутри самой БД.
  9. Microsoft медленно движется к концепции ‘open source’?
    Статья, размещённая на сайте internetnews.com, посвящена высказыванию менеджера Microsoft, отвечающего за Shared Source Initiative и предполагающего, что Microsoft 'движется к промежуточному состоянию' в дебатах по поводу ‘открытых кодов’, делая доступным для публики всё больше проектов согласно своей модели лицензирования ‘совместных кодов’.
    Согласно статье, ‘ныненшний спектр технологий Microsoft включает 14 различных аспектов – такие, как Windows 2000, Windows XP, Windows Server 2003, Windows CE 3.0, Windows CE .NET, реализация C#/CLI, компоненты ASP.NET и Visual Studio .NET.’ (Упоминавшаяся реализация C#/CLI, известная как Rotor, может быть найдена на сайтах http://msdn.microsoft.com и http://www.sscli.net.)
    Является ли это высказывание сигналом того, что Редмонд стал больше склоняться к концепции ‘открытых кодов’? Или это только тот минимум, необходимый для того, чтобы объявить Microsoft компанией, дружественной движению ‘открытых кодов’, дающий возможность поставить ещё одну галочку в их PR(public relations-отношения с общественностью)-списке?
  10. Представляем Naked Objects для .NET
    Каркас Naked Objects предназначен для дизайна и разработки бизнес-систем, в которых функциональность бизнеса реализована в виде методов объектов домена, которые автоматически и непосредственно становятся доступными пользователю. Naked Objects привлекли много внимания в мире Java, а теперь вышла и версия для .NET.
  11. Visual Studio .NET 832460
    FIX: The Data Adapter Configuration Wizard does not work correctly when you use subqueries in Visual Studio .NET 2003
  12. Visual Studio .NET 830724
    FIX: 'The memory could not be 'read' error message when your .NET Framework application is under heavy load
  13. Visual Studio .NET 832681
    An exception occurs in the callback function and the Visual Studio .NET debugger does not receive the program control when a callback function does not contain code to handle exceptions in the try/catch block
  14. Visual Studio .NET 834486
    Selection of multiple project outputs is not supported for Setup projects in Visual Studio .NET
  15. ASP.NET 837000
    The PartialCachingControl.CachedControl property always returns a null reference
  16. Visual C# .NET 836666
    The 'Unable to Apply Code Changes Dialog Box' Help topic is not complete in Visual Studio .NET

{К содержанию}

Управление состоянием в веб-формах

Управление состоянием в веб-формах

ЯЗЫК: C#
Автор статьи: Jalajakshi Venkataramana
Дата публикации оригинала: 26.02.2004 г.

ПЕРЕВОД: Чужа В.Ф. ака hDrummer


Вступление

В этой статье обсуждаются способы управления состоянием в веб-формах. Как показано ниже, такое управление может быть осуществлено как на стороне сервера, так и на стороне клиента.

Введение в управление состоянием в веб-формах

Учитывая природу стандартного протокола обмена данными (http), веб-страницы пересоздаются вновь и вновь после каждой их передачи на сервер. Происходит это потому, что вся информация, ассоциированная со страницей, такая, например, как значения в элементах управления, размещённых на странице, будет теряться каждый раз при пересылке страницы от браузера к серверу и назад. Средства автоматического управления состоянием, хранящие информацию на стороне клиента или на сервере и поддерживаются каркасом .Net для преодоления этих унаследованных ограничений.

Рекомендации по управлению состоянием

Что такое управление состоянием?
Управление состоянием – это процесс, с помощью которого вы сохраняете состояние страницы (или страниц) и информацию, связанную с ней, на протяжении некоторого количества запросов к данной странице. Страницы веб-форм не умеют сохранять своё состояние, что также верно и для других технологий, базирующихся на протоколе HTTP. Что же это значит? Это значит, что исходя из данных, передаваемых со страницей, невозможно определить, были ли запросы посланы одним клиентом и просматривает ли в данный момент пользователь эту страницу или сайт. Больше того, страницы разрушаются и создаются во время каждого цикла браузер-сервер-браузер, следовательно, информация, связанная со страницей, не будет существовать вне жизненного цикла самой страницы.
ASP.NET предлагает множество путей для управления состоянием; выбор того или иного пути сильно зависит от вашего приложения и должен базироваться на следующих критериях:

  • Сколько информации нужно хранить?
  • Может ли клиент принимать постоянные cookie или cookie, размещённые в памяти?
  • Хотите ли вы хранить информацию на клиенте или на сервере?
  • Насколько чувствительна информация?
  • Какие критерии быстродействия вы предъявляете к вашему приложению?

ASP.NET поддерживает множество вариантов управления состоянием как на клиентской части приложения, так и на сервере.

Варианты использования на стороне клиента:

  • Свойство View State
  • Скрытые (hidden) поля
  • Использование cookie
  • Использование строк запросов

На стороне сервера:

  • Использование состояния приложения
  • Использование состояния сессии
  • Хранение в базе данных

Рекомендации по использованию управлением состояния на стороне клиента

Следующие разделы описывают варианты управления состоянием, в которых используется хранение информации или в странице или на компьютере клиента – т.е. на сервере информация не хранится ни в каком виде.

1. Использование View State

Свойство Control.ViewState предлагает словарь для хранения значений между вызовами одной и той же страницы. Это способ, с помощью которого страница сохраняет состояние элементов управления между такими запросами. Во время обработки страницы текущее состояние страницы и её элементов управления хэшируется в строчку, значение которой хранится в странице как скрытое поле. Когда страница отправляется назад на сервер, происходит разбор этой строки во время инициализации страницы и восстановление состояния страницы и элементов управления, расположенных на ней.
Преимущества использования view state:

  • Не используются ресурсы сервера. View state содержится в структуре самой страницы.
  • Простая реализация.
  • Автоматическое сохранение состояния страницы и элементов управления.
  • Улучшенная безопасность – значения во view state захэшированы, сжаты и кодированы в Unicode,что представляет собой более безопасный вариант по сравнению со скрытыми полями.
Недостатки использования view state:
  • Быстродействие. Поскольку view state хранится в самой странице, хранение больших значений приводит к замедлению отображения страницы и отправки её на сервер.
  • Безопасность. View state хранится в скрытом поле на странице. И хотя информация хранится в хешированном виде, это не защитит её от фальсификации или другого вида вмешательства. Информация хранится в скрытом поле и может быть увидена при просмотре исходного кода страницы, что уже само по себе потенциально небезопасно.

2. Скрытые поля формы

ASP.NET позволяет использовать скрытые поля формы, являющиеся стандартными в HTML. Скрытое поле не отображается в браузере, но его свойства можно устанавливать также, как и в случае обычных элементов управления. При пересылке страницы на сервер содержимое скрытого поля отсылается в коллекции HTTP формы наряду со значениями других элементов управления. Скрытое поле работает как некое хранилище для любой информации, специфичной для данной страницы, которую вы храните в самой странице. Скрытое поле хранит единственную переменную в свойстве value и должно быть явно добавлено к странице, после чего собственно и происходит добавление к нему значения. ASP.NET содержит класс HtmlInputHidden, который и реализует функциональность скрытого поля.

Для того чтобы хранимые поля были доступны во время обработки страницы, передавать её нужно по протоколу HTTP POST. Если же вы используете HTTP GET протокол, то вы не сможете воспользоваться преимуществами скрытых полей.
Итак, преимущества использования скрытых полей заключаются в следующем:
  • Нет необходимости в использовании серверных ресурсов. Скрытые поля хранятся и считываются из страницы.
  • Широкая поддержка - практически все браузеры и устройства-клиенты поддерживают формы со скрытыми полями.
  • Простота реализации.
Недостатки использования скрытых полей:
  • Безопасность. Существует возможность вмешательства в значения, хранящиеся в скрытых полях, которые видны при просмотре исходного кода страницы, что потенциально небезопасно.
  • Ограниченная структура хранилища. Скрытые поля не поддерживают хранение сложных структур, предлагая только одно поле value, в которое можно поместить информацию. Для хранения нескольких значений в этом поле необходимо использовать строчки с разделителем и реализацию их анализа в коде.
  • Быстродействие. Поскольку скрытые поля хранятся в самой странице, хранение больших значений переменных может привести к тому, что отображение в браузере или отправка страницы будет несколько медленнее.

3. Куки (Cookies)

Куки (cookie) – небольшой объём информации, хранящийся в текстовом файле на стороне клиента или в памяти сессии браузера клиента. В куки хранится информация, специфичная для страницы, которую сервер отправляет клиенту вместе с запрошенной страницей. Куки бывают временные (с определённой датой и временем истечения срока действия) или постоянными.

Вы можете использовать куки для хранения информации о конкретном клиенте, сессии или приложении. Куки хранятся на устройстве клиента и, во время запроса страницы браузером, происходит отправка информации, хранящейся в куки вместе с запрошенной информацией. Сервер может прочесть куки и получить данную информацию в своё распоряжение. Типичный пример использования – хранение некоего признака того, что пользователь уже прошёл аутентификацию в вашем приложении. Браузер может отослать данные только тому серверу, который создал этот самый файл куки. Куки – относительно безопасный способ хранения данных, характеризующих данного конкретного пользователя.
Преимущества использования куки:
  • Экономия ресурсов сервера. Куки хранятся на клиенте и считываются сервером после отправки страницы.
  • Простота. Куки – это небольшая текстовая структура с простыми парами ключ-значение.
  • Конфигурируемое время действия. Куки могут прекращать своё существование по окончанию сессии браузера или наоборот, постоянно находиться на клиентской машине, предоставив самому клиенту управлять временем своей жизни.
Недостатки использования куки:
  • Ограниченный размер. Большинство браузеров ограничивают размер куки в 4096 байт, хотя использование ограничения в 8192 байта становится всё более распространённым в новых их версиях.
  • Пользователь имеет возможность отказаться от использования куки, что делает их применение ограниченным.
  • Безопасность. Существует возможность вмешательства пользователя в данные, хранящиеся в куки, что потенциально небезопасно.
  • Длительность существования. Существование куки ничем не гарантировано – пользователь может удалить файл до того, как завершится срок истечения его действия.

4. Строки запросов

Под строкой запроса здесь имеется в виду информация, добавленная к концу URL’a страницы. Например:
http://www.contoso.com/listwidgets.aspx?category=basic&price=100

В URL’e, приведенном выше строка запроса начинается со знака вопроса (?) и включает две пары переменная/значение – категорию("category") и цену("price").
Строки запросов предлагают простой, но ограниченный способ хранения некоторой информации. Например, они являются лёгким способом передачи информации от страницы к странице, однако большинство браузеров ограничивают длину URL’a 255 символами. Вдобавок значения передаваемых переменных видны в браузере, что не согласуется с требованиями безопасности.
Для того чтобы воспользоваться значениями, передаваемыми с помощью строки запроса, необходимо передавать страницу с помощью метода HTTP GET.
Преимущества:
  • Экономия ресурсов сервера.
  • Широкая поддержка. Практически все браузеры и клиентские устройства поддерживают такой способ передачи значений.
  • Простая реализация. ASP.NET полностью поддерживает такой способ передачи значений, включая методы для чтения строк запроса с использованием свойства HttpRequest.Params.
Недостатки:
  • Несоответствие требованиям безопасности – значения легко изменить в браузере.
  • Ограниченная вместимость – в основном ограничивается 255 символами на весь URL.

Рекомендации по управлению состоянием на стороне сервера

Хранение информации, связанной со страницей, на стороне сервера более предпочтительно с точки зрения безопасности, чем на стороне клиента. Однако в этом случае используется гораздо больше ресурсов веб-сервера, что может привести к проблемам масштабирования, если размер хранимой информации достаточно велик. ASP.NET предлагает несколько способов реализации управления состоянием на стороне сервера. Рассмотрим их по порядку.

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

Для каждого активного веб-приложения ASP.NET позволяет нам сохранять значения переменных, используя состояние приложения (объект класса HttpApplicationState). Состояние приложение – глобальный механизм хранения переменных, которые доступны из всех страниц веб-приложения и может использоваться для хранения данных во время передачи страницы от сервера к клиенту и назад или для передачи данных между страницами.

Состояние приложения – это структура, напоминающая словарь, содержащий пары ключ-значение, которые создаются во время запроса каждого URL. Вы можете добавить в эту структуру информацию, специфичную для вашего приложения, для её хранения между запросами к странице.
Преимущества:
  • Лёгкость использования.
  • Глобальная область видимости. Поскольку состояние приложения доступно для всех страниц приложения, хранение информации в этой структуре означает хранение только одной копии такой информации (например, в отличие от использования сессионных переменных).
Недостатки:
  • Глобальная область видимости также может быть минусом. Переменные приложения глобальны только для некоторого процесса приложения и каждый процесс приложения может иметь разные значения. Поэтому вы не можете полагаться на переменные уровня приложения в случае хранения уникальных значений или обновления глобальных счётчиков в случае веб-садов или веб-ферм.
  • Устойчивость. Поскольку глобальные данные, хранимые в состоянии приложения являются временными, то они исчезнут при разрушении процесса на веб-сервере – чаще всего такое происходит из-за зависания веб-сервера, его обновления или отключения.
  • Требования к ресурсам. Использование переменных уровня состояния приложения требуют дополнительной памяти, что может сказаться на быстродействии сервера и масштабируемости всего приложения.

2. Состояние сессии

ASP.NET позволяет вам хранить переменные, используя состояние сессии, являющейся объектом класса HttpSessionState, создаваемого для каждой активной сессии веб-приложения.

Состояние сессии подобно состоянию приложения, единственное отличие – значения переменных, сохранённых в ней, будут видно только для текущей сессии браузера. И если разные пользователи используют ваше приложение, то каждый из них будет иметь различные сессии. К тому же, если пользователь выходит из приложения, а потом возвращается, то он будет работать в другой сессии, а не в той, из которой вышел.
Структура состояние сессии аналогична структуре состояния приложения.
Использование состояния сессии позволит вам:
  • Уникально идентифицировать запросы браузера и привязывать их к индивидуальной сессии на сервере.
  • Хранить на сервере данные, специфичные для сессии
  • Вызывать соответствующие сессионные события. Вдобавок, можно писать код обработки этих событий.
  • После добавки информации, специфичной для приложения, в переменные сессии, сервер полностью управляет объектом сессии. В зависимости от того, какие опции вы укажете, сессионная информация может храниться в куки, на другом сервере или в SQL Server.
Преимущества использования сессионного состояния:
  • Лёгкость реализации. Использование переменных сессии легко, знакомо разработчикам, использовавших классический ASP и согласуется с другими классами .NET Framework.
  • Возможность использования событий, специфических для сессии.
  • Продолжительность существования. Данные, размещённые в сессионных переменных, могут пережить рестарт IIS’a (Internet Information Services) и рабочего процесса, поскольку хранятся в другом процессе.
  • Масштабируемость платформы. Сессионное состояние может использоваться в многокомпьютерных и многопроцессных конфигурациях.
  • Сессионные структуры работают с браузерами, не поддерживающими куки.
Минусы:
  • Эффективность работы. Переменные сессии остаются в памяти до тех пор, пока их не удаляют или перезаписывают, что может сказаться на быстродействии сервера, особенно если они содержат большие наборы данных, например dataset’ы.

3. Поддержка БД

Использовать хранение состояние с помощью технологий баз данных является общепринятой практикой в случае хранения больших объёмов информации, специфичной для пользователя. Хранение в БД бывает полезно тогда, когда информацию нужно хранить в течение длительного времени или тогда, когда состояние должно быть сохранено даже в случае перезагрузки сервера. В случае хранения информации в БД часто параллельно используют куки. Например, во время первой загрузки вашего приложения, пользователь должен войти (залогиниться) в него. Вы можете найти этого пользователя в БД и передать ему куки. Куки может содержать только ID пользователя в вашей СУБД. Затем, при последующих запросах, можно пользоваться куки для поиска информации об этом пользователе в вашей БД.

Использование БД позволяет вам:
  • Уникально идентифицировать запросы браузера или конечного клиентского устройства и привязывать их к уникальному идентификатору
  • Хранить состояние с привязкой к уникальному ID. Можно использовать уникальный ID для выполнения запросов к БД, касающихся этого ID. Затем можно модифицировать эту информацию и сохранять в БД для дальнейшего использования.
  • Вызов определенных событий. Некий флаг в БД может сигнализировать о действии пользователя. Например, если пользователь коммерческого сайта пытается купить нечто, чего нет на складе, по результатам запроса к БД можно предложить пользователю сделать другой выбор.

В некоторых случаях вы можете захотеть использовать БД для поддержки состояния вашего веб-сайта. Обычно параллельно с таким решением используются куки и сессионные переменные. Например, в реализациях веб-сайтов, обслуживающих электронную коммерцию, часто хранят информацию в реляционных БД по следующим причинам:
  • Безопасность
  • Персонализация
  • Последовательность
  • Возможность осуществлять data mining
Типичные признаки веб-сайта, построенного с использованием куки и БД:
  • Безопасность. Посетитель набирает имя своей учётной записи и её пароль на странице входа. Инфраструктура сайта опрашивает БД на предмет наличия у пользователя с такими данными прав на использование этого сайта. Если введенные данные соответствуют данным в БД, сайт отправляет куки с уникальным ID на ПК посетителя, а затем разрешает ему доступ.
  • Персонализация. Считывая куки с компьютера клиента, сайт в состоянии узнать каждого пользователя. Обычно сайты хранят информацию в БД, описывающую предпочтения пользователя (узнаваемого по уникальному идентификатору). Это поведение известно как персонализация.
  • Последовательность. Создав сайт, возможно вы захотите хранить записи о приобретённых товарах и услугах, сделанных на вашем сайте. Эта информация может быть сохранена в вашей БД и выбрана согласно пользовательскому ID. Она может быть использована для определения того, завершена ли транзакция или для определения причины, по которой она была отменена. Также её можно использовать для информирования пользователя о состоянии заказа, который был сделан им на этом сайте.
  • Data mining. Информация об использовании вашего сайта, о посетителях, сделанных покупках, может храниться в вашей БД и использоваться, например, для прогнозирования продаж. Ваш маркетинговый отдел может изучить демографическую информацию посетителей сайта и т.д. и т.п. Большинство реляционных СУБД уровня корпорации, таких, как Microsoft SQL Server, содержат большой набор инструментов для реализации проектов добычи и обработки данных.
Преимущества использования БД для хранения состояния сайта:
  • Безопасность. Доступ к БД обычно предоставляет высокую степень безопасности, требуя аутентификации и авторизации.
  • Объём. Вы можете хранить столько информации в БД, сколько захотите.
  • Постоянство. Информация в БД может храниться столько времени, сколько вы пожелаете, и никак не зависит от доступности веб-сервера.
  • Целостность данных.
  • Доступность. Данные, хранящиеся в БД, доступны для обработки широким спектром инструментов обработки информации.
  • Широкая поддержка. Доступен целый спектр различных инструментов, для обработки хранящейся информации.
Минусы использования БД:
  • Сложность.
  • Эффективность. Ошибки в проектировании могут привести к проблемам масштабирования, а использование большого числа запросов может снизить быстродействие сервера.

{К содержанию}

Время кода

Таинственные сессии и их события

ЯЗЫК: C#
АВТОР: Alvin Bruney,
http://www.csharphelp.com/
ПЕРЕВОД: Чужа В.Ф ака hDrummer

Сессии и их события можно назвать как минимум своеобразными, а как максимум – слишком сложными. Это является следствием необходимости обслуживания различных провайдеров состояния. Я исследовал некоторые аспекты сессий, для того, чтобы показать, что события начала и конца сессии необязательно всегда отрабатывают в паре.

Представьте себе разочарованного программиста, поместившего код в событие, вызываемое по окончанию сессии и терпеливо ожидающего исполнения этого кода, который должен выполнить некоторые очистки памяти и запись в БД. Его код базируется на ошибочном предположении, что запрос новой страницы должен вызвать событие окончания сессии. И вот итог - хорошо продуманный код не работает.

Для того чтобы решить подобную проблему, давайте посмотрим, как всё это работает. Некоторые важные моменты касаются сессионного идентификатора. Если этот идентификатор регенерируется, происходит автоматический вызов события конца сессии. Если же он наоборот не регенерируется, то существующий идентификатор используется при обслуживании нового запроса и событие конца сессии не происходит. Для более полной картины давайте посмотрим, что приводит к регенерации идентификатора сессии. Итак, новый идентификатор генерируется, если выполнены два условия:

  • происходит хотя бы однократная запись в структуру словаря сессии
  • успешно завершается хотя бы один запрос

Если хотя бы одно из этих условий не выполняется, то события конца и начала сессии могут не вызваться в виде согласованной пары.

Использовав знание этого факта, легко создать тестовый проект, в котором несколько запросов страниц не приводят к вызову события конца сессии. Также легко создать пример, в котором события начала и конца сессии вызываются в паре. Единственное, о чём надо помнить – так это о тех двух условиях, которые должны выполняться в этом случае.

Давайте исследуем другого зверька - session.abandon(). Поведение его тоже отличается таинственностью – в зависимости от того, на каком конце стола вы сидите – иногда он может вызвать событие окончания сессии, а иногда нет. Давайте же разберемся, как этот ингридиент влияет на суп, называемый .NET. Session.Abandon может вызвать конец сессии, если режим работы приложения установлен в inproc. Если же вы создадите страницу, первой строчкой которой будет вызов метода session.abandon – событие конца сессии не вызовется, что может заставить вас прийти к неверным выводам. На самом деле опять не произошло полного выполнения условия для того, чтобы это событие было вызвано.

Метод Abandon удаляет идентификатор сессии путём отсылки cookie с новым идентификатором сессии с более старой датой окончания действия. Затем этот метод удаляет словарь, ассоциированный с сессией. Будет ли вызвано затем событие конца сессии, целиком зависит от сессионного идентификатора. Это стоит повторить: если происходит регенарция сессионного идентификатора, то происходит и вызов события конца сессиии, если такой регенерации не было – не будет и события конца сессии. Т.е. в одном случае вызов метода session.abandon() приведет к вызову конца сессии, а в другом – нет. Надо признать, что это довольно странное поведение, если вы не в курсе всей картины.

И ещё одно. Если сессионный идентифкатор используется, то он остается прежним до тех пор, пока не закрывается браузер, даже если происходит вызов новой страницы. Пока условия соблюдены, идентификатор остаётся прежним. Теперь, вооруженный этим знанием, программист может переделать свой код так, чтобы он работал верно.

Вот и текст примера, использовавшегося для теста:

protected System.Web.UI.WebControls.Button Button1; private void Page_Load(object sender, System.EventArgs e)
{

//если удалить следующую строчку кода,
//то условие регенерации идентификатора
//будет выполнено только частично
Session["test"] = "test";< /FONT >

//событие конца сессии не будет вызвано
//если убрать комментарий в следующей строке кода
//потому что запрос ещё успешно не завершен
//Session.Abandon();
}

private void Button1_Click(object sender, System.EventArgs e)
{

//а здесь событие конца сессии будет вызвано
//потому что оба условия уже удовлетворены
Session.Abandon();
}


{К содержанию}

Форумы .Net - вопросы оставшиеся без ответа

Общие вопросы коннекта...
Работа с миллисекундами
WebBrowser.Navigate... и proxy
DataGrid : Как менять ширину колонок?
Изменение данных в DBF из ASP
Как вызвать web-сервис из простого ASP ?
Печатная форма документа
crystal report сильно много данных
Копирования текста в переменную
Ошибка с ADODB в ASP
прозрачная панель
Как сделать динамический массив string[]
Редактор для пользовательского класса
Запуск процедуры с пакета...
Перетаскивание кнопки.

На этом девятый выпуск .Net Собеседника закончен.
До следующего номера.



Чужа Виталий Ф. aka hDrummer,
hdrummer@sql.ru - жду ваши предложения, вопросы и замечания.


Рассылки Subscribe.Ru
.Net Собеседник - Новости мира Net, C#, ASP.Net


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное