Рассылка закрыта
При закрытии подписчики были переданы в рассылку "BloggLand и Я | Блоггландия" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
В девятом выпуске рассылки '.Net Собеседник' вы можете познакомиться с обзором
Информационный Канал Subscribe.Ru |
.Net Собеседник #9
Содержание- От автора
- Обзор новостей
- Управление состоянием в веб-формах
- Время кода - Таинственные сессии и их события
- Форумы .Net на www.sql.ru
От автора
Здравствуйте, коллеги!
<iewc:TreeView id="tvMain" runat="server"></iewc:TreeView> (это тыг компоненты TreeView из набора IE Web Controls)
Теперь в конце обзора новостей постараюсь помещать информацию о новых статьях в Microsoft Knowledge Base, касающихся .Net и C#.
{К содержанию}
Обзор новостей
-
Вышел DotNetBar Suite 3.6
- DevComponents LLC объявила о выходе DotNetBar Suite 3.6. В новый выпуск добавлена многофункциональная панель с тремя предопределёнными стилями, поддержка цветовых схем, градиентный фон и поддержка различных состояний мыши. DotNetBar Suite включает различные меню, панели инструментов, плавающие окна, боковые панели, панели с закладками, панели проводника, а также другие элементы управления – всё с поддержкой тем для Office 2003, XP, 2000 и Windows XP. DotNetBar – на 100% совместимый с .NET компонент. На веб-сайте присутствует пробная версия.
-
ActiveUp
выпустила ActiveMail V1.8
- Active Mail – это набор .NET компонент, позволяющий пользователю отсылать электронную почту согласно заданных шаблонов или почту, привязанную к неким данным, получать и разбирать сообщения с использованием нескольких протоколов, таких, как SMTP, IMAP4, POP3 и NNTP. Доступно формирование почтовых очередей. Также поддерживается расширенное слияние почты
-
Новая книга:
Программирование Crystal Reports .NET
- 23 Марта вышла книга Брайна Бишофа "Crystal Reports .NET Programming". Книгу можно заказать на сайте www.crystalreportsbook.com (3/23) или www.amazon.com на (4/1). Для ознакомления доступна электронная книга с несколькими главами из бумажного издания.
-
Компонент Apoc
PDF
- Компонент Apoc PDF позволит разработчику манипулировать существующими документами PDF и создавать новые документы PDF. Разработанный на платформе Microsoft .NET этот компонент совместим с любым .NET-приложением - ASP.NET, приложением Windows и консольными приложениями.
-
ComponentOneВ объявляет о поддержке INETA
- ComponentOne LLC объявила о поддержке Интернациональной .Net Ассоциации (International .NET Association - INETA), путём специального предложения для её членов. Члены INETA могут подписаться на ComponentOne Studio Enterprise 2004 v1 и бесплатно стать подписчиками журнала ‘MSDN Magazine’.
-
MiddTec перебросила мост от CORBA
к платформе Microsoft .NET
- Новая технология компании MiddTec способствует интеграции в мир .NET. Разработка и среда MiddCor.NET позволят пользователям задействовать приложения CORBA – вскоре пополнящимися приложениями J2EE – в инфраструктуре .NET. MinCor.NET предлагает идеальное решение для встраивания новой периферии (смартфонов и PDA) в корпоративную инфраструктуру .NET и CORBA, базирующуюся на ОС Windows.
-
Выпуск
Yukon и Whidbey откладывается
- Выпуск Yukon и Whidbey отложен на первую половину 2005 года. Также объявлены официальные названия продуктов - Yukon будет называться SQL Server 2005, а Whidbey - Visual Studio 2005. Напомню, что Yukon собирались выпустить в 2003 году.
-
Глава Programming Yukon: The Inproc Managed Provider
- Эта глава, взятая из книги ‘Programming Yukon Book-In-Review’ посвящена Inproc Managed Provider, новому набору классов для доступа к данным версии SQL Server’a Yukon. Inproc Managed Provider представляет классы из пространства имён System.Data.SqlServer и предназначен для доступа к данным изнутри самой БД.
-
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-отношения с общественностью)-списке? - Статья, размещённая на сайте internetnews.com, посвящена высказыванию менеджера Microsoft, отвечающего за Shared Source Initiative и предполагающего, что Microsoft 'движется к промежуточному состоянию' в дебатах по поводу ‘открытых кодов’, делая доступным для публики всё больше проектов согласно своей модели лицензирования ‘совместных кодов’.
-
Представляем Naked Objects для .NET
- Каркас Naked Objects предназначен для дизайна и разработки бизнес-систем, в которых функциональность бизнеса реализована в виде методов объектов домена, которые автоматически и непосредственно становятся доступными пользователю. Naked Objects привлекли много внимания в мире Java, а теперь вышла и версия для .NET.
-
Visual Studio .NET 832460
- FIX: The Data Adapter Configuration Wizard does not work correctly when you use subqueries in Visual Studio .NET 2003
-
Visual Studio .NET 830724
- FIX: 'The memory could not be 'read' error message when your .NET Framework application is under heavy load
-
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
-
Visual Studio .NET 834486
- Selection of multiple project outputs is not supported for Setup projects in Visual Studio .NET
-
ASP.NET 837000
- The PartialCachingControl.CachedControl property always returns a null reference
-
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 хранится в скрытом поле на странице. И хотя информация хранится в хешированном виде, это не защитит её от фальсификации или другого вида вмешательства. Информация хранится в скрытом поле и может быть увидена при просмотре исходного кода страницы, что уже само по себе потенциально небезопасно.
2. Скрытые поля формы
ASP.NET позволяет использовать скрытые поля формы, являющиеся стандартными в
HTML. Скрытое поле не отображается в браузере, но его свойства можно
устанавливать также, как и в случае обычных элементов управления. При пересылке
страницы на сервер содержимое скрытого поля отсылается в коллекции HTTP формы
наряду со значениями других элементов управления. Скрытое поле работает как
некое хранилище для любой информации, специфичной для данной страницы, которую
вы храните в самой странице. Скрытое поле хранит единственную переменную в
свойстве value и должно быть явно добавлено к странице, после чего собственно и
происходит добавление к нему значения. ASP.NET содержит класс HtmlInputHidden,
который и реализует функциональность скрытого поля.
- Нет необходимости в использовании серверных ресурсов. Скрытые поля хранятся и считываются из страницы.
- Широкая поддержка - практически все браузеры и устройства-клиенты поддерживают формы со скрытыми полями.
- Простота реализации.
- Безопасность. Существует возможность вмешательства в значения, хранящиеся в скрытых полях, которые видны при просмотре исходного кода страницы, что потенциально небезопасно.
- Ограниченная структура хранилища. Скрытые поля не поддерживают хранение сложных структур, предлагая только одно поле value, в которое можно поместить информацию. Для хранения нескольких значений в этом поле необходимо использовать строчки с разделителем и реализацию их анализа в коде.
- Быстродействие. Поскольку скрытые поля хранятся в самой странице, хранение больших значений переменных может привести к тому, что отображение в браузере или отправка страницы будет несколько медленнее.
3. Куки (Cookies)
Куки (cookie) – небольшой объём информации, хранящийся в текстовом файле на
стороне клиента или в памяти сессии браузера клиента. В куки хранится
информация, специфичная для страницы, которую сервер отправляет клиенту вместе
с запрошенной страницей. Куки бывают временные (с определённой датой и временем
истечения срока действия) или постоянными.
- Экономия ресурсов сервера. Куки хранятся на клиенте и считываются сервером после отправки страницы.
- Простота. Куки – это небольшая текстовая структура с простыми парами ключ-значение.
- Конфигурируемое время действия. Куки могут прекращать своё существование по окончанию сессии браузера или наоборот, постоянно находиться на клиентской машине, предоставив самому клиенту управлять временем своей жизни.
- Ограниченный размер. Большинство браузеров ограничивают размер куки в 4096 байт, хотя использование ограничения в 8192 байта становится всё более распространённым в новых их версиях.
- Пользователь имеет возможность отказаться от использования куки, что делает их применение ограниченным.
- Безопасность. Существует возможность вмешательства пользователя в данные, хранящиеся в куки, что потенциально небезопасно.
- Длительность существования. Существование куки ничем не гарантировано – пользователь может удалить файл до того, как завершится срок истечения его действия.
4. Строки запросов
Под строкой запроса здесь имеется в виду информация, добавленная к концу URL’a
страницы. Например:
http://www.contoso.com/listwidgets.aspx?category=basic&price=100
- Экономия ресурсов сервера.
- Широкая поддержка. Практически все браузеры и клиентские устройства поддерживают такой способ передачи значений.
- Простая реализация. ASP.NET полностью поддерживает такой способ передачи значений, включая методы для чтения строк запроса с использованием свойства HttpRequest.Params.
- Несоответствие требованиям безопасности – значения легко изменить в браузере.
- Ограниченная вместимость – в основном ограничивается 255 символами на весь URL.
Рекомендации по управлению состоянием на стороне сервера
Хранение информации, связанной со страницей, на стороне сервера более предпочтительно с точки зрения безопасности, чем на стороне клиента. Однако в этом случае используется гораздо больше ресурсов веб-сервера, что может привести к проблемам масштабирования, если размер хранимой информации достаточно велик. ASP.NET предлагает несколько способов реализации управления состоянием на стороне сервера. Рассмотрим их по порядку.
1. Состояние приложения
Для каждого активного веб-приложения ASP.NET позволяет нам
сохранять значения переменных, используя состояние приложения (объект класса
HttpApplicationState). Состояние приложение – глобальный механизм хранения
переменных, которые доступны из всех страниц веб-приложения и может
использоваться для хранения данных во время передачи страницы от сервера к
клиенту и назад или для передачи данных между страницами.
- Лёгкость использования.
- Глобальная область видимости. Поскольку состояние приложения доступно для всех страниц приложения, хранение информации в этой структуре означает хранение только одной копии такой информации (например, в отличие от использования сессионных переменных).
- Глобальная область видимости также может быть минусом. Переменные приложения глобальны только для некоторого процесса приложения и каждый процесс приложения может иметь разные значения. Поэтому вы не можете полагаться на переменные уровня приложения в случае хранения уникальных значений или обновления глобальных счётчиков в случае веб-садов или веб-ферм.
- Устойчивость. Поскольку глобальные данные, хранимые в состоянии приложения являются временными, то они исчезнут при разрушении процесса на веб-сервере – чаще всего такое происходит из-за зависания веб-сервера, его обновления или отключения.
- Требования к ресурсам. Использование переменных уровня состояния приложения требуют дополнительной памяти, что может сказаться на быстродействии сервера и масштабируемости всего приложения.
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 – событие конца сессии не вызовется, что может заставить вас прийти к неверным выводам. На самом деле опять не произошло полного выполнения условия для того, чтобы это событие было вызвано.
И ещё одно. Если сессионный идентифкатор используется, то он
остается прежним до тех пор, пока не закрывается браузер, даже если происходит
вызов новой страницы. Пока условия соблюдены, идентификатор остаётся прежним.
Теперь, вооруженный этим знанием, программист может переделать свой код так,
чтобы он работал верно.
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 - жду ваши предложения, вопросы и замечания.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||