Что такое код asp application_onstart


Содержание

ASP Application_OnStart and Application_OnEnd Events

Application_OnStart Event

The Application_OnStart event occurs before the first new session is created (when the Application object is first referenced).

This event is placed in the Global.asa file.

Note: Referencing to a Session, Request, or Response objects in the Application_OnStart event script will cause an error.

Application_OnEnd Event

The Application_OnEnd event occurs when the application ends (when the web server stops).

This event is placed in the Global.asa file.

Note: The MapPath method cannot be used in the Application_OnEnd code.

Разница между Application_Start и Application_OnStart

Я нахожусь в процессе добавления ASP.NET MVC кода для предсуществующего проекта ASP.NET WebForms. В различных обучающих программах предлагают добавление маршрутизации к способу вызывается из Application_Start () в Global.asax. Мой Global.asax уже есть метод Application_OnStart (Object, EventArgs) с некоторым кодом установки.

Если я пытаюсь иметь как Start и OnStart, то OnStart не дозвонились (и сбой установки, что приводит к ошибкам). Похоже, что я должен выбрать один или другой.

Мой вопрос: какой из них я должен использовать? В чем разница между ними? Они называли в разное время?

(Примечание: на момент написания этой статьи топ три Google хитов бесполезны и / или вводить в заблуждение Я надеюсь , переполнение стека может исправить.) .

В классическом (унаследованных) ASP, есть несколько специальных имен функций, которые, если они определены в файле global.asa, будет выполняться в определенных точках в течение всего жизненного цикла приложения. Они определяются как:

  • Application_OnStart — выполняется один раз, когда приложение получает первый запрос HTTP и непосредственно перед любыми файлами .asp обрабатываются.
  • Application_OnEnd — запускается один раз, во время завершения работы приложения, после того, как все запросы будут обработаны.
  • Session_OnStart — проходит в начале каждого уникального сеанса пользователя. Если пользователь / клиент отключил печенье, это работает для каждого запроса, так как ASP никогда не обнаруживает куки сессии, идентифицирующий существующий сеанс.
  • Session_OnEnd — (! Теоретически) работает каждый раз, когда истекает сеанс пользователя. Удачи вам в этом.

Они в основном зашитые в классический ASP выполнение — вы не можете изменить их, и вы не можете прикреплять любые другие методы к этим событиям.

В ASP.NET, есть то , что называется , AutoEventWireup который использует отражение , чтобы найти методы , соответствующие конкретные соглашения об именовании, и запускает эти методы в ответ на соответствующие события , поднятые во время выполнения ASP.NET. Наиболее распространенный пример является Page_Load методом, который автоматически вызывается в ответ на класс страницы стрельбы события Load в течение жизненного цикла страницы.

Тот же метод используется для подключения обработчиков к жизненным циклом событий на уровне приложений. Он будет искать методы именованных либо ModuleName_EventName или ModuleName_OnEventName, принимая либо без параметров () или (object sender, EventArgs e)

Вот самое интересное — если вы определяете более одного метода согласования, только тот , который появляется последним в файле будет выполнять . (Последний метод выигрывает, в основном)

Так что если ваш Global.asax.cs выглядит следующим образом:

вы увидите сообщение D в вашем выводе отладки; если вы закомментировать последний метод в этом блоке, вы увидите сообщение C вместо этого.

Таким образом — использование в зависимости от того именование вам нравится, но если вы определяете более одного, только тот , который появляется в последний раз в исходном файле будет выполняться. Я бы лично придерживаться , Application_Start(object sender, EventArgs e) так как это подпись генерируется шаблонами Visual Studio проекта и большинство / инструменты кодирования .NET дизайн.

Что такое код asp application_onstart

Этот текст предназначен для тех, кто никогда не имел дела с ASP и вообще смутно себе представляет возможности программирования на стороне сервера. Я ставил себе задачу создать у читателя общее представление о предмете. Отдельные неточности при этом менее важны — пожалуйста, громко не ругайтесь.

Общие сведения

ASP (Active Server Pages) – это мощная технология от Microsoft, позволяющая легко разрабатывать приложения для WWW. ASP работает на платформе Windows NT и IIS (Internet Information Server), начиная с версии 3, хотя вроде есть реализации на других платформах. ASP – это не язык программирования, это внутренняя технология, позволяющая подключать программы к Web-страницам. Основа успеха ASP – простой скриптовый язык (Visual Basic Script или Java Script) и возможность использования внешних COM-компонент.

Как это все происходит?

Вы пишете программу и складываете в файл на сервере. Браузер клиента запрашивает файл. Файл сначала интерпретируется сервером, на выходе производится HTML-код. Этот HTML посылается клиенту. Файлы с программами имеют расширение .asp. Файлы asp – это обычные текстовые файлы, содержащие исходные тексты программ. Файлы делаются с помощью любого текстового редактора. Каталог, в котором размещены файлы asp должен иметь права на выполнение, так как сервер исполняет эти файлы, когда браузер их запрашивает. Собственно программы пишутся на любом скриптовом языке, который установлен в системе. По умолчанию поддерживаются VBScript и JavaScript. Можно доустановить другие (например, Perl). Если ничего специально не указывать используется VBScript. В дальнейшем будем ссылаться только на него. Программные фрагменты заключаются в скобки . Можно ставить открывающую скобку в начале файла, закрывающую – в конце, все что между ними – программа на Visual Basic’е.

Какие средства есть для программирования?

Web – нормальная среда программирования, если правильно понять, что есть что. В VBScript есть все нормальные конструкции структурного программирования (if, while, case, etc). Есть переменные (описывать не обязательно, тип явно не задается). Поддерживаются объекты. Работа с ними обычная – Object.Property, Object.Method. Есть ряд встроенных объектов (Request, Response, Session, Server, Connection, Recordset). Можно доустанавливать другие компоненты (скачивать, покупать, программировать), например для работы с электронной почтой.

Вывод

Понятия «экран», куда можно выводить данные нет. Все, что надо показать пользователю, выбрасывается в выходной поток на языке HTML. Браузер пользователя интерпретирует этот HTML. Для упрощения вывода существует объект Response . Вывод осуществляется с помощью метода Write .


Так производится запись во внутренний буфер объекта Response. Когда скрипт заканчивает работу, весь буфер выдается клиенту. Надо заметить, что клиент получает «чистый» HTML, таким образом программы на ASP не зависят от клиентского ПО, что очень важно. Если внутри выводимой строки нужно использовать кавычку, кавычка удваивается. Другие методы и свойства Response позволяют управлять выводом. Так Response.Buffer регулирует, получает ли клиент данные по мере из записи в Response, или все сразу по завершении исполнения страницы. Метод Response.Redirect перенаправляет браузер на другую страницу. Чтобы им пользоваться, нельзя до него на странице использовать Response.Write.

Программа на ASP не может явно спросить пользователя о чем-то. Она получает данные из других страниц, либо через URL. Передаваемые параметры помещаются во входной поток и доступны через объект Request . Чтобы передать переменную var в программу test.asp , надо написать:

Чтобы из программы получить значение этой переменной, надо написать:

Несколько переменных разделяется знаком &:

Кроме того, чтобы задавать параметры в URL, можно воспользоваться формами HTML. В вызывающей странице пишем так:

Так это выглядит:

При этом пользователь увидит форму из одного поля ввода (var1), в нем будет значение по умолчанию «default». Второе поле (var2) будет невидимо и будет передавать всегда фиксированное значение «var2value». Кнопка «Submit Form» завершает заполнение формы и передает все переменные на test.asp (action). Если method=»get», переменные передаются через URL (test.asp?var1=default&var2=var2value). Если method=»post», передаются вместе с запросом так, что внешне передача переменных не заметна. В вызываемой программе безразлично, какой метод изпользовался (почти). Если у вас нет специальных аргументов за метод GET, используйте метод POST.

Формы

Формы HTML используются для организации диалога с пользователем. Поддерживаются стандартные элементы управления. Все многообразие задается немногими тэгами:

  • INPUT (с параметром TYPE=)
  • SELECT
  • TEXTAREA

Описание – в документации по HTML.

Взаимосвязь между отдельными страницами

Обычно сервер WWW не хранит состояние приложения, т.е. все запросы взаимонезависимы, и нет стандартного способа понять, что несколько запросов пришли от одного и того же пользователя. Но это очень нужно для разработки полноценных приложений и является одной из главных проблем разработки Web-приложений.

Один из методов решения этой проблемы — cookies . Пользователю при первом обращении выдается специальный идентификатор, после этого браузер пользователя предъявляет этот идентификатор при каждом обращении, и сервер может распознать, что это тот же самый пользователь. Пользователь может отключить cookies, в этом случае этот метод не работает.

ASP, используя cookies, предоставляет программисту более простое средство — объект Session (сессия). Сессия стартует, когда новый пользователь обращается к любому asp-файлу приложения. Сессия заканчивается при отсутствии активности пользователя в течение 20 минут, либо по явной команде. Специальный объект Session хранит состояние сессии. Туда можно записывать переменные, которые доступны из любой страницы в этой сессии. Записать данные в этот объект можно просто:

Считать потом еще проще:

Сессия, таким образом, – это еще один метод передачи данных между страницами. Одна страница пишет данные в сессию, другая – берет потом оттуда.

Наряду с объектом Session существует объект Application . Если сессия создается для каждого нового пользователя, до Application существует в единственном экземпляре, и может использоваться всеми страницами приложения.

Управление приложением

Программисту предоставляется возможность реагировать на 4 события: старт/стоп приложения и старт/стоп каждой сессии. Для реализации этих событий предназначен файл global.asa , который должен располагаться в корневом каталоге приложения. Вот его примерный скелет:

Нужно «просто» вписать Ваш код на соответствующее место. Нужно заметить, что отлаживать код для global.asa довольно непросто, так как он выполняется при очень специфических обстоятельствах (к примеру при старте или остановке сервера).

Использование внешних компонент

Если на сервере установлены дополнительные компоненты, их можно использовать из ASP. Стандартные объекты (например из библиотек ADO (Connection и Recordset) и Scripting (Dictionary, FileSystemObject)) доступны всегда. Установка новой компоненты обычно состоит в копировании dll-файла в каталог на сервере и ее регистрации с помощью программы regsvr32.exe. [В COM+ используется своя процедура инсталляции объектов, это однако не влияет на использования объектов.]

Создать экземпляр объекта можно так:

Class.Object указываются в документации на компоненту. В переменной var запоминается ссылка на созданный экземпляр объекта. Когда объект не нужен, ссылку нужно обнулить с помощью команды:

Пожалуйста всегда обнуляйте все ссылки на объекты, когда они больше не нужны. Теоретически это должно происходить автоматически при завершении процедуры/страницы, однако в стандартной сборке мусора есть определенные «проблемы».

В остальном использование компоненты зависит от самой этой компоненты.

Работа с базами данных

Из ASP можно легко и просто работать с любыми базами данных. Это делается через две промежуточные технологии: ODBC и ADO.

ODBC позволяет организовать доступ к любым базам данных через унифицированный интерфейс с помощью языка SQL. Специфика конкретных СУБД учитывается при помощи специальных драйверов БД. Такие драйверы существуют для всевозможных СУБД (в частности SQL Server, Oracle, Access, FoxPro). Поддержка ODBC обеспечивается на уровне операционной системы Windows (NT). Настройка – через Control Panel/ODBC. Базовым понятием является источник данных или data source. Источник данных – это совокупность сведений о базе данных, включая ее драйвер, имя компьютера и файла, параметры. Чтобы пользоваться базой надо создать источник данных для нее. Важно, чтобы источник данных был «системным», в отличии от «пользовательского». После этого надо лишь знать имя источника данных. [В настоящее время ODBC отступает перед натиском технологии OLE DB. На практике это однако практически ничего не изменяет. Вместо имени источника данных нужно использовать Connection String, в которой указывается имя ODBC-драйвера и все его параметры.]

ADO – это совокупность объектов, доступных из ASP, позволяющих обращаться к источнику данных ODBC [или OLE DB]. Фактически нужны лишь 2 объекта – Connection , представляющий соединение с базой данных и Recordset , представляющий набор записей, полученный от источника. Сначала необходимо открыть соединение, потом к нему привязать Recordset, потом, пользуясь методами Recordset’а, обрабатывать данные. Вот пример:

Если команда SQL не возвращает данных, recordset не нужен, надо пользоваться методом Conn. Execute (SQL_COMMAND).

Если Вы хотите вызывать хранимые процедуры сервера БД с параметрами, нужно воспользоваться объектом Command , который в свою очеред содержит объекты Parameter .

Методики программирования, советы



Описание переменных

VBScript — очень нетребовательный к программисту язык. Так он не требует описывать переменные и не содержит явных типов данных. Все переменные принадлежат одному типу Variant . Из-за отсутствия описаний могут произойти очень трудно обнаруживаемые ошибки. Одна опечатка может стоить полдня поисков.

Однако, есть возможность явно потребовать описания переменных. Для этого первой строкой в ASP-файле нужно написать Option Explicit . После этого обращение к переменной, которая не была объявлена с помощью Dim , вызывает ошибку с указанием номера строки.

Кстати, где расположены описания Dim в процедуре — совершенно не важно. Они могут стоять как до использования переменной, так и после, и даже в цикле. Видимо они отрабатываются препроцессором. Явно задать тип переменной с помощью Dim Var as Typ , как в Visual Basic, все равно нельзя.

Чередование ASP/HTML

Если нужно выдать большой кусок HTML, можно не пользоваться Response.Write. Если в asp-файле встречается кусок текста вне скобок , он трактуется просто как HTML, который надо вывести. Пример:

Обработка ошибок

Для отслеживания ошибок используется специальный объект Err . Он устанавливается в ненулевое значение, если предыдущая команда породила ошибку. Ее можно проверять с помощью If, и таким образом реагировать на ошибки. Чтобы из-за ошибки не прерывалось выполнение программы, в начале нужно включить команду

Включение других файлов

Можно выносить повторяющийся код в отдельный файл, и подключать к разным другим по мере необходимости с помощью команды include . Это очень удобно, если вы хотите вынести повторяющийся код в отдельный файл и использовать снова и снова в разных страницах:

Важно: все includes в тексте отрабатываются до исполнения файла. Т.е. даже если include стоит внутри if, то сначала будут включены все includes во всех ветках, и только потом, во время исполнения, будет принятно решение, какую ветку выполнять. Т.е. следующий код не дает условного включения файлов:

Обработка форм

Если надо что-то спросить у пользователя и на основании этого что-то сделать, в простейшем случае создается два файла: один с формой, второй – с ее обработчиком. Обработчик выполняет все действия. Пример:

Рекурсивная обработка форм

Удобный метод состоит в том, чтобы сбор данных и обработку осуществлял один и тот же файл. Для этого пишется asp, в котором есть разные разделы. Специальная переменная отвечает за выбор раздела при запуске. Пример:

Переменные HTTP

Запрос от браузера, кроме запрашиваемой страницы несет еще некоторые данные. Эти данные, например, IP-адрес клиента, доступны через специальные переменные объекта Request. IP-адрес – Request(«REMOTE_ADDR»). Другие — см.документацию (ASPSamp\Samples\srvvar.asp).

Переадресация

Очень легко написать на ASP скрипт, который будет производить некоторые расчеты, и в зависимости от результатов переадресовывать браузер на разные URL (например, подставлять нужный баннер). Делается это так:

Только надо следить, чтобы до выполнения команды redirect ничего не было записано в Response (даже коментарии HTML).

Электронная почта

Одна из часто встречающихся задач – отправить электронную почту с Web-страницы. На первый взгляд, можно просто написать

Но это приводит к тому, что при отправке формы делается попытка на клиентской машине запустить почтовую программу и создать новое сообщение с данными формы. Если это не получается (почтовая программа не настроена, пользователь не отправил почту, и т.д.) — письмо и не будет отправлено. Гораздо надежнее работает серверное решение.

Для этого существуют внешние компоненты, есть и бесплатные. Например, компонента Jmail от Dimac. Все, что для нее нужно – это адрес SMTP-сервера. Вот пример ее использования:

Уроки ASP-технологий

Объект Application

Теперь давайте рассмотрим объект Application. Он предназначен для хранения глобальных переменных ASP-приложения, то есть переменных, которые доступны каждому сеансу приложения. Эти переменные находятся в коллекции Contents, к которой обычно обращаются сокращенно. Например, запишем следующий код в файл default.asp.

Затем создадим файл test.asp и наберем такой код:

После этого исполним сценарий default.asp, а затем test.asp. Последний выведет строку test в окне браузера. Вообще, в какой бы сценарий приложения мы не вставили код test.asp, результат будет одним и тем же.

Объект Application предоставляет разработчикам два метода:

Они предназначены для блокирования и разблокирования, соответственно, всего приложения. Например, чтобы избежать ситуации, когда в переменную уровня приложения записываются одновременно два значения, можно применить следующий код:

Кроме коллекций и свойств у объекта Application есть два события: Application_OnEnd и Application_OnStart, которые мы рассмотрим чуть позже.

Объект Session

Этот объект предназначен для управления сеансами. Он имеет четыре свойства:


  • CodePage
  • LC >Первые два свойства — это таблица кодировки и идентификатор локали. Их мы рассматривать не будем, так как они практически не используются.

    Свойство SessionID доступно в режиме «только для чтения» и возвращает уникальный идентификатор сеанса. Использование:

    Свойство TimeOut отвечает за время, через которое движок ASP прервет сеанс и удалит всю связанную с ним информацию на сервере. Установка этого свойства не позволяет оставлять данные о конкретном пользователе на сервере после того, как он отключился. Принимает значения в минутах. Например:

    Объект Session имеет один метод — Abandon, который позволяет принудительно прервать сеанс до истечения срока, указанного в свойстве TimeOut. Пример использования:

    В объекте Session, как и в объекте Application, можно хранить данные. Для этого используются переменные уровня сессии. Например:

    Кроме того, объект Session предоставляет разработчикам два события: Session_OnStart и Session_OnEnd, которые мы рассмотрим немного ниже.

    Файл Global.asa

    С чего начинается … нет, не Родина :-) — web-приложение? Ответ такой: с файла Global.asa. Он является главным файлом приложения. В этом файле могут существовать только следующие элементы:

  • Четыре события: Application_OnStart, Application_OnEnd, Session_OnStart, Session_OnEnd;
  • Тэги , которые применяются для создания экземпляров ActiveX-компонентов.
  • Специальные мета-тэги, которые применяются для подключения библиотеки типов DLL-компонентов.

    Примечание: файл Global.asa не обязательно должен присутствовать в приложении, но если уж он задействован, то непременно должен быть одним на все приложение.

    Итак, рассмотрим события, которые могут находится в файле global.asa.

    Они возникают примерно в таком вот порядке:

  • При первом вызове какого-либо сценария движок ASP пытается найти файл global.asa в корне вашего web-приложения, а в нем — обработчик события Application_OnStart.
  • Если такой файл существует и есть обработчик события Application_OnStart, то код, содержащийся в нем, исполняется.
  • Иначе движок пытается найти обработчик события Session_OnStart и исполнить код, содержащийся в нем.
  • По завершении сеанса возникает событие Session_OnEnd.

    Если разработчик изменил файл global.asa, а затем сохранил его, то приложение заканчивает работу и вызывается событие Application_OnEnd. Вообще, это событие возникает, когда приложение завершается (когда происходит перезапуск web-сервера, перезапуск компьютера и т. д.).

    Создание экземпляров ActiveX-компонентов с помощью тэга происходит следующим образом:

    Атрибут RUNAT всегда принимает значение Server. Атрибут SCOPE определяет область видимости компоненты (Application или Session). ID — это идентификатор, с помощью которого в дальнейшем можно будет получить доступ к объекту. Далее вы указываете PROGID или CLASSID, которые нужны, чтобы идентифицировать компонент.

    Например, вы хотите создать экземпляр компонента BrowserCapabilities (он рассматривался выше), который был бы доступен каждому сеансу приложения. Для этого в файле global.asa необходимо написать примерно следующий код:

    После этого вы получаете доступ к свойствам и методам данного компонента из любого сценария вашего приложения простым обращением к переменной MyBrowser. Например:

    Также экземпляры ActiveX-компонентов можно создавать с помощью подключения библиотеки типов данной компоненты. Делается это следующим образом:

    Атрибут TYPE всегда принимает значение TypeLib. В атрибуте FILE необходимо указать путь к библиотеке типов вашего компонента. UUID — это уникальный идентификатор этой библиотеки. Указывать можно либо FILE, либо UUID. VERSION — это, естественно, версия компоненты :-). Атрибут LCID отвечает за идентификатор локали.

    Например, у вас есть библиотека динамической компоновки MyLib.dll, а у нее есть библиотека типов MyLib.lib. Вы можете подключить ее в файле global.asa вот таким способом:

    Затем в любом сценарии приложения можно использовать этот компонент следующим образом:

    Создание ASP-компонентов в Delphi 6

    Что такое ASP

    SP (Active Server Pages) — технология, которая позволяет создавать Web-страницы, содержащие код, выполняемый Web-сервером, и динамически формировать Web-страницы. Вместе с Microsoft Internet Information Services поставляется несколько COM-объектов, выполняющих серверный код. Современная версия этой технологии позволяет использовать в ASP-страницах произвольные серверные компоненты. Клиентское приложение, использующее ASP-объекты, представляет собой HTML-документ (куда могут также входить клиентский и серверный коды на скриптовых языках), который можно прочесть практически с помощью любого Web-браузера. Обычно эти HTML-документы размещаются на каком-либо Web-сервере (как правило, это Microsoft Internet Information Server версии 3.0 и выше). Web-сервер, получив требование о предоставлении документа, считывает его из локального хранилища и передает клиенту, при этом часть информации вносится в документ Web-сервером динамически; сам же Web-сервер в этом случае может обращаться к ASP-объектам (входящим в комплект поставки Internet Information Server или созданным сторонними разработчиками). Как правило, Web-документы, содержащие обращения к ASP-объектам, имеют расширение *.asp. Примеры подобных документов можно найти в каталогах, создаваемых при установке Internet Information Server.


    Ранее (см. Компьютер Пресс, №2’2001, c. 169) мы рассказывали о создании простейших ASP-приложений, в том числе для работы с базами данных. Настоящую публикацию следует рассматривать как продолжение той статьи.

    Объекты, используемые в ASP

    ерархию объектов, используемых в технологии ASP, можно увидеть на рис. 1.

    Объект Request

    Объект Request используется для доступа к данным, которые формируются клиентом при обращении к ASP-серверу. Доступ к объекту Request получают с помощью интерфейса IRequest, которому присущи следующие основные свойства и методы:

    • свойство ClientSertificate — содержит значения всех полей клиентного сертификата, которые пересылаются в http-сообщении;
    • свойство Cookies — содержит значения всех заголовков Cookie в HTTP-запросе. Cookie — небольшие текстовые файлы, которые запоминаются на компьютере конечного пользователя и передаются на сервер в каждом запросе. С их помощью можно создать «сессию» для клиента: когда клиент обращается первоначально к одной, затем к другой странице и т.д. (при этом клиент не имеет права перейти к следующей странице, не обратившись к предыдущей);
    • свойство Form — если клиент осуществляет обращение к ASP-серверу с помощью формы, то можно получить значения заполненных полей в форме при обращении к свойству Form с добавлением имени поля;
    • свойство ServerVariables — содержат большинство переменных, необходимых для формирования HTTP-заголовков;
    • свойство TotalBytes — суммарное число байт, которые передаются клиентом на сервер. Реальное число байт может быть меньше, так как протокол HTTP не позволяет пересылать пакеты, размер которых превышает 8 Kбайт;
    • свойство QueryString — содержит имена и значения полей запроса при использовании метода GET;
    • свойство Body — содержит имена и значения полей запроса при использовании метода POST;
    • метод BinaryRead — используется для получения содержимого всего запроса, посылаемого клиентом, если размер запроса превышает 8 Kбайт. Вызов этого метода позволяет получить следующие 8 Kбайт данных HTTP-запроса. Вызов следует повторять до тех пор, пока не будет прочитан весь запрос; при этом размер последнего пакета может быть менее 8 Kбайт. Результаты вызова метода запоминаются в двоичном массиве. Следует обратить внимание на то, что после вызова этого метода нельзя обращаться к свойству Form.

    Объект Response

    В этом классе формируется отклик ASP-сервера, который передается клиенту. Доступ к этому объекту осуществляется через интерфейс IResponse. Основные свойства и методы данного интерфейса таковы:

    • свойство Cookies — позволяет создать коллекцию параметров вместе с их значениями. К этой коллекции также добавляется время, в течение которого данную коллекцию следует сохранять в клиентском приложении. При успешном получении отклика клиент запоминает эти параметры на диске в виде файла. При следующем обращении к серверу эти данные будут переданы в запросе и их можно будет получить при использовании свойства Request.Cookie. Анализ этих данных позволяет определить, обращался ли клиент к серверу ранее и если обращался, то с какими запросами. Cookie используются для создания «сессии» с клиентом в CGI-приложениях, поскольку IP-адреса клиента могут изменяться Proxy-серверами во время сессии. В ASP-приложениях возможно также создание сессии для клиента (это мы обсудим ниже);
    • свойство Buffer — если значение этого свойства равно True, то осуществляется буферизация отклика. При этом значении параметра отклик клиенту не отправляется до тех пор, пока не будет вызван метод Request.End (этот метод автоматически вызывается после обработки всего ASP-документа, то есть когда сформированы отклики от всех ASP-серверов) или Flush;
    • свойство CacheControl — определяет, может ли клиент кэшировать отклик;
    • свойство Charset — определяет имя шрифта для содержимого отклика ContentType=”text/html”;
    • свойство ContentType — указывает содержимое отклика. По умолчанию это свойство имеет значение text/html. Это значение необходимо изменять, например, при передаче картинок (image/jpeg или image/gif и т.д);
    • свойство Expires — при значении CacheControl=True определяет, сколько времени хранится отклик на клиентском месте;
    • свойство ExpiresAbsolute — то же самое, что Expires, только определяет абсолютную дату и время хранения отклика;
    • свойство IsClientConnected — указывает, был ли клиент отсоединен от сервера;
    • свойство Status — нормальное значение статуса «200 OK» означает успешную генерацию отклика. При невозможности создать отклик следует изменять значение статуса. Так, «401 Unauthorized» означает, что пользователю запрещено обращаться к данной странице по соображениям безопасности, например в случае неправильно введенного пароля;
    • метод AddHeader — добавляет заголовок в отклик. Заголовки добавляются в виде =” ”;
    • метод AppendToLog — добавляет строку в Log-файл Web-сервера. Эта строка не передается клиенту;
    • метод BinaryWrite — формирует двоичный отклик. Чаще всего используется для передачи клиенту картинок;
    • метод Clear — полностью очищает отклик. После этого его требуется формировать заново с самого начала;
    • метод End — прекращает обработку ASP-документа и немедленно возвращает результат клиенту. Вызывается автоматически после завершения обработки ASP-документа, но может быть вызван явно из кода ASP-сервера. После его вызова вызовы методов Write или BinaryWrite запрещены;
    • метод Flush — отправляет текущее содержимое буфера клиенту. Формирование отклика может продолжаться дальше;
    • метод Write — используется для записи текстовой информации в отклик;
    • метод Redirect — позволяет переадресовать запрос на другой URL. При этом можно поменять параметры запроса в объекте Request.

    Объект Server

    Этот объект позволяет обращаться к Internet Information Services и экспонирует ряд его методов и свойств:

    • свойство ScriptTimeout — время в минутах, в течение которого сессия существует без генерации нового запроса или без вызова команды Refresh со стороны клиента;
    • метод CreateObject — вызов этого метода используется для запуска COM-сервера, который будет принимать скрипты с ASP-документа и генерировать отклик, который вставляется вместо скрипта;
    • метод Execute — выполняет скрипт в указанном ASP-файле;
    • метод GetLastError — возвращает объект ASPError, в котором можно получить полную информацию о последней ошибке;
    • метод HTMLEncode — заменяет зарезервированные символы в HTML-документе подходящим набором символов, которые интерпретируются браузером и позволяют клиенту увидеть на экране зарезервированные символы. Например, дизайнер Web-сайта хочет, чтобы клиент увидел на экране следующее сочетание символов:
      . Если эту последовательность вставить в HTML-документ, то она будет интерпретирована как разрыв строки. Для этой последовательности символов метод HTMLEncode вернет: %3CBR%3E. При помещении этой последовательности символов в HTML-документ клиент увидит на экране
      ;
    • метод MapPath — конвертирует путь, выраженный в терминах виртуальных каталогов (абсолютный или относительный), в путь к физическому каталогу на данном компьютере;
    • метод Transfer — пересылает весь текущий отклик к другому ASP-серверу для продолжения формирования отклика;
    • метод URLEncode — перекодирует URL, включая специальные символы, в строку.

    Объект Session

    Этот объект создается во время первого обращения клиента к ASP-серверу. Замечательная особенность этого объекта — его способность сохраняется в течение некоторого времени после генерации отклика клиенту. Если в течение этого времени клиент вновь обратится к серверу, то сможет работать внутри ранее созданной сессии. Если внутри этого объекта объявить переменные, то в них можно запоминать состояние клиента. Этот факт значительно облегчает проведение сессий с клиентом по сравнению с CGI-приложениями, где постоянно приходится анализировать Cookie. Основные свойства и методы объекта Session:

    • свойство StaticObjects — коллекция всех объектов, добавленных к сессии при помощи тэга . Можно прочитать или изменить все значения свойств этих объектов. Вызов метода Remove удаляет данный объект. Вызов метода RemoveAll удаляет все объекты;
    • свойство Contents — коллекция всех динамически создаваемых объектов. Эти объекты можно создавать во время выполнения и использовать их при последующих обращениях клиентов к Web-серверу;
    • свойство CodePage — указывает страницу кодировки символов, которая может изменяться в зависимости от локальных настроек;
    • свойство LCID — языковой идентификатор, используемый для интерпретации текстовых строк;
    • свойство SessionID — идентификатор сессии для данного клиента. Генерируется автоматически и является постоянным для всех запросов данного клиента;
    • свойство Timeout — время в минутах, в течение которого существует сессия без генерации нового запроса или без вызова команды Refresh со стороны клиента;
    • метод Abandon — разрушает сессию и возвращает все ресурсы;
    • событие Session_OnStart — генерируется в момент создания сессии. Оно генерируется после события Application_OnStart, но до начала выполнения кода. Все переменные в сессии уже являются доступными, и к ним можно обращаться. Обработчик этого события должен быть написан на языке VBScript или JavaScript;
    • событие Session_OnEnd — наступает перед разрушением сессии по истечении времени TimeOut или после вызова метода Abandon. В обработчике событий можно работать с объектами Application, Server и Session, но не с Request и Response. Обработчик этого события должен быть написан на языке VBScript или JavaScript.

    Для сохранения состояния клиента (это главная особенность) используется следующий синтаксис:

    Рассмотрим в качестве примера Интернет-магазин. Предположим, пользователь на первой Web-странице выбирает наименование товара (например, Intel Processor), на второй странице — количество этого товара (например, 5), на третьей странице отображается цена, после чего ожидается подтверждение заказа. Ясно, что для генерации третьей страницы необходимо знать значения параметров с первых двух страниц. Поэтому после возвращения отклика с первой страницы используется команда:

    Session.Value[‘GoodName’]:=’ Intel Processor ‘;

    Имя выбранного товара можно получить после анализа свойств объекта Request. После второй страницы используем команду:

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

    В объекте Session можно также запоминать динамически создаваемые объекты (об этом будет рассказано ниже).

    Объект Application

    Этот объект используется для хранения и обработки данных, которые являются общими для всех сессий. При помощи объекта Application можно передавать данные от одного клиента к другому. Основные свойства и методы объекта Application:

    • свойство Contents – содержит список всех объектов, которые были добавлены при выполнении скриптов из ASP-документов. Объект Contents имеет два метода: Remove удаляет данный объект, а RemoveAll удаляет все объекты. Сюда же можно помещать ссылки на динамически создаваемые объекты при выполнении кода ASP-сервера;
    • свойство StaticObjects — список всех объектов, которые были добавлены при помощи тэга ;
    • метод Lock. Клиенты работают в многопоточном режиме, а переменные в объекте Application являются общими для всех клиентов. Поэтому если надо обратиться к свойствам объекта Application или к методам, которые работают с переменными данного объекта, то обязательно требуется вызов метода Lock. Это дает возможность безопасно работать с переменными Application, в то время как остальные клиенты будут ожидать окончания работы с этим объектом. После чтения или записи свойства (либо окончания работы метода) требуется вызов метода Unlock, и только после этого переменные (методы) будут доступны для других клиентов;
    • метод Unlock — делает доступными переменные или методы объекта Application другим клиентам;
    • событие Appliation_OnStart — наступает в момент первого старта приложения и продолжается до создания сессии. Из обработчика этого события можно обращаться только к объектам Server и Application. Обработчик этого события должен быть написан на языке VBScript или JavaScript;
    • событие Application_OnEnd — вызывается в момент завершения ASP-приложения, после разрушения всех сессий. Доступные объекты и языки для описания обработчика те же, что и у обработчика Application_OnStart.

    Использование объекта Session для хранения состояния

    втоматическая обработка полей Cookie в ASP-технологии позволяет определить, обращался ли ранее клиент к данному Web-серверу. При первом обращении клиента для него создается объект Session. При последующих обращениях этого же клиента для него назначается ранее созданный объект Session. Объект Session разрушается либо при отсутствии в течение интервала времени Session.TimeOut новых запросов от клиентов, либо при вызове метода Session.Abandon из кода. В объекте Session можно хранить переменные и объекты, которые динамически создаются или изменяются. Эти изменения видны при каждом последующем обращении клиента. Таким образом, объект Session может хранить состояние клиента. Данная возможность, реализованная на уровне технологии, обеспечивает ASP-приложениям существенные преимущества по сравнению с CGI- и ISAPI-приложениями, где для хранения состояния необходимо писать трудоемкий код для работы с Cookie.

    Для тестирования прежде всего требуется настроить Microsoft Internet Information Services (IIS). Для этого создадим виртуальную директорию IIS, которая обязательно должна иметь разрешение как на чтение (из нее будут читаться данные), так и на выполнениe скриптов (из нее будет загружен *.asp-документ). Директория должна быть доступна с помощью протокола HTTP. Поэтому в первую очередь нужно обратиться к Web-сервису Internet Information Server, просмотреть список доступных директорий и при необходимости создать новые с соответствующими правами доступа.

    В нашем примере на компьютере, который имеет IP-адрес 192.168.0.2, была создана виртуальная директория /Test, соответствующая физическому адресу на компьютере C:\ASPTest. В директорию, имеющую права доступа Read и Script, был скопирован файл Test.asp. Сам файл ASP01.dll (COM-сервер) можно поместить в произвольную директорию. Главное — чтобы он был зарегистрирован в системном реестре. Для этого после выполнения команды Save As в Delphi 6 выберем команду меню Run/Register ActiveX server и выполним ее.

    Продолжим работу с сессией. Воспользуемся проектом, создание которого было описано ранее (см. КомпьютерПресс, № 2’2001, c. 196). Исходный код проекта можно найти на нашем CD-ROM. Сначала разберемся, каким образом можно сохранять и изменять переменные. Для этого в секции private класса TTest модуля ASP01_U1 обьявим метод:


    В каждом методе модуля ASP01_U1 вызовем метод IncrementCallCount с параметром Name= . Например, в ранее объявленном методе GetPicture (см. КомпьютерПресс, № 2’2001, с.196) обратимся к IncrementCallCount следующим образом:

    Далее добавим в библиотеку типов новый метод GetCallCount, как было описано выше. Реализуем этот метод следующим образом:

    И наконец, создадим ASP-документ с вызовом метода GetCallCount:

    Сохраним этот документ в файле Test3.asp в директории C:\ASPTest (напомним, что она зарегистрирована в Internet Information Server и имеет разрешения на чтение и выполнение кода). Далее, обращаясь к ранее созданным ASP-документам, будем обращаться к объявленным ранее методам ASP-сервера в произвольной последовательности и произвольное число раз, пока, наконец, не дойдем до страницы Test3.asp. В результате получим примерно следующий отклик, какой представлен на рис. 2.

    Напротив названия каждого метода стоит число обращений к нему клиента в текущей сессии. Если вызвать команду Refresh в браузере, то можно заметить, что число напротив надписи GetCallCount увеличится на 1.

    Данные в коллекции Session.Value хранятся в виде вариантных переменных; иными словами, они могут принадлежать любому типу, конвертируемому в OleVariant: integer, single, double, WideString и т.д. Можно хранить и массивы — для этого вызывается функция VarArrayCreate. Доступ к переменным осуществляется по имени. Коллекция Session.Value возвращает пустое значение (null), если ранее переменная с данным именем не была добавлена к коллекции. Добавление новой переменной осуществляется в случае присвоения значения элемента коллекции с уникальным именем.

    Однако ссылки на экземпляры классов (объекты) в этой коллекции хранить нельзя. Точнее говоря, хранить их можно: например привести указатель к типу integer и сохранить в коллекции Session.Value. Далее можно получать доступ к объекту приведением типа и таким образом при каждом следующем обращении клиента получать ссылку на объект и работать с ним. Казалось бы, все хорошо, однако при разрушении сессии по истечении TimeOut деструкторы объектов вызваны не будут. Это означает, что при работе такого сервера постепенно будут исчерпываться доступные системные ресурсы и в конце концов Web-сервер просто «рухнет». Если бы существовала возможность создать обработчик события Session_OnEnd в коде Delphi, то деструкторы можно было бы вызвать явно. Однако этот обработчик может быть создан только в ASP-документе на языках VBScript или JavaScript.

    Выход из создавшейся ситуации заключается в использовании коллекции Session.Contents, которая предназначена для хранения объектов. В принципе, коллекция Session.StaticObjects также используется для хранения объектов, но ее нельзя модифицировать во время выполнения приложения. Идея хранения объектов в коллекции Session.Contents заключается в следующем: объекты, которые необходимо хранить, поддерживают интерфейс IUnknown (или его потомок). Именно ссылка на этот интерфейс и помещается в коллекцию Session.Contents. При закрытии сессии для всех интерфейсов, хранящихся в этой коллекции, вызывается метод Release. Соответственно из этого обработчика событий можно вызвать деструктор класса при равенстве нулю числа ссылок на интерфейс.

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

    Первоначально создадим ASP-документ, содержащий форму с двумя кнопками: Back и Next. В данном документе вызовем новый метод ASP-сервера, который назовем, например, TestSession. В этом методе будем анализировать запрос и смещать текущую запись вперед или назад. Сохраним документ в файле Test4.asp. Окончательный вид документа следующий:

    Далее создадим новый модуль данных и поместим на него компоненты TADOConnection и TADOTable. В ADOConnection1 сошлемся на базу данных Northwind. В компоненте ADOTable1 сошлемся на ADOConnection1, свойству TableName присвоим значение Alphabetical list of products, а его свойство Active установим равным True. Это означает, что немедленно после отработки конструктора будет установлена связь с сервером баз данных. Объявим новый интерфейс ISessionObject — потомок IUnknown. Полезно к этому интерфейсу добавить метод, который будет возвращать указатель на модуль данных. Несмотря на то что использовать указатели в интерфейсах запрещено вследствие необходимости осуществлять маршалинг для разных модулей, в нашем случае это оправданно, поскольку данный метод будет использоваться только внутри модуля ASP01. Все внешние приложения (в том числе Internet Information Services) будут работать с этим интерфейсом как с Iunknown, не «зная» о существовании метода, возвращающего указатель.

    Окончательный код выглядит следующим образом:

    Данный код прост и не требует комментариев. Ключевой метод — ObjRelease — уменьшает число ссылок и при их равенстве нулю вызывает деструктор класса. Некоторые изменения потребуются и в классе TTest модуля ASP01_U1. Прежде всего необходимо вызвать конструктор класса TDataModule2. Наиболее подходящее место для вызова конструктора — событие Session_OnStart — недоступно из кода Delphi. Метод AfterConstruction также подходит мало — при обращении к нему не определены ссылки на объекты Session, Application, Server. Необходимо, чтобы эти объекты были инициализированы из интерфейса IScriptingContext — именно это и делает метод OnStartPage. Поэтому будем вызывать конструктор из метода TTest.OnStartPage. При этом следует учитывать, что конструктор мог быть вызван раньше — во время предыдущего запроса клиента. Следовательно, необходима предварительная проверка существования экземпляра класса TTest. Окончательно код будет выглядеть следующим образом:

    Первоначально в переменную V пытаемся копировать переменную с именем DataModule, которая хранится в объекте Session. Если это не удается (что происходит, когда пользователь обращается к ASP-серверу в первый раз), то создаем экземпляр класса TDataModule2, получаем от него ссылку на интерфейс ISessionObject и запоминаем ее в объекте Session под именем DataModule. Теперь поведение экземпляра класса TDataModule2 будет корректным: он будет существовать, пока существует объект Session для данного клиента, и разрушаться с окончанием сессии. Чтобы убедиться в этом, достаточно переписать деструктор TDataModule2 и поместить туда оператор Beep (визуальные элементы управления в ASP-приложениях показывать запрещено). Если после этого вновь обратиться к ASP01 и затем выгрузить ASP-сервер, как было описано выше, то можно услышать звук динамика.

    Осталось реализовать метод TestSession в классе TTest — он формирует отклик для клиента. В этом методе необходимо получить доступ к хранящемуся в объекте Session экземпляру класса TDataModule2, проанализировать запрос и при нажатии кнопки Next переместить курсор на следующую запись, а при нажатии кнопки Prior — на предыдущую. Окончательный код выглядит следующим образом:

    В нем используется определенный ранее метод ISessionObject.getDataModule для получения ссылки на экземпляр класса TDataModule2. Скомпилировав этот проект и обратившись к созданной ранее странице Test4.asp, можно получить отклик, который представлен на рис. 3.

    При нажатии клавиши Next получаем страницу со следующей записью; Prior — с предыдущей.

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

    Программирование на ASP

    Основы ASP

    С помощью объекта Response код ASP может выполнять запись текста на клиенте – любого содержимого, включая код, выполняющийся на клиенте. IIS различает код, выполняющийся на сервере, и содержимое, отправляемое клиенту с помощью расширения ISAPI ASP . DLL , анализируя файл ASP на наличие начального (» «) тега и выполняя код, расположенный между ними, с помощью WSH.

    На рисунке 12.7 показан пример редактирования страницы ASP с помощью Visual Interdev. На одной и той же ASP -странице расположены строки содержимого, записываемые на клиенте с помощью объекта Response , и код, выполняемый на сервере.

    Первая строка кода – – сообщает ASP . DLL о том, что необходимо начать поиск кода для интерпретации. В данном примере для обработки ASP -страницы установлен язык ASP , поэтому тег %> в конце выполняемого кода означает, что все последующие строки кода должны игнорироваться, за исключением тега .

    Как показано на рисунке 12.7, если ASP . DLL встречает тег после строки с тегом , то интерпретирует последующие строки кода вплоть до конечного тега %> , расположенного после строки Response.Write(«what time is it? ->» & now()) . Результат запроса браузером файла MyAspFile1.asp (страница ASP на рис. 12.7) показан на рис. 12.8.

    Объекты ASP

    ASP содержит следующие объекты, обеспечивающих потребности разработчика в реализации решения, отвечающего на событие веб-запроса.

    • Объект Response. Используется для записи данных в запрос HTTP, возвращаемый клиенту.
    • Объект Aplication. Содержит параметры и конфигурации по настройке работы ASP для данного веб-сайта.
    • Объект Request. Хранит содержимое HTTP-запроса и обеспечивает вспомогательные функции для обработки разработчиком данных HTTP-запроса.
    • Объект Server. Содержит информацию о веб-сервере, веб-сайте, а также обеспечивает поддержку вызывающего программного обеспечения.
    • Сеанс. Представляет собой состояние заданного веб-сеанса с заданным хостом и клиентом.

    Объект Response


    Как и все объекты ASP, класс объекта Response всегда доступен коду ASP во время веб-запроса. Этот объект обеспечивает потребность разработчика в записи данных на компьютер-клиент во время выполнения веб-запроса. Функция Write объекта Response возвращает клиенту содержимое переданного ей аргумента. Объект Response также позволяет разработчику контролировать запись данных в HTTP-запрос.

    Объект Application

    Объект Application используется, в основном, в файле global. asa для фиксирования событий приложения ASP. Объектом Application фиксируются следующие события.

    • Session_OnStart. Вызывается при первом запросе пользователя к веб-сайту.
    • Session_OnEnd. Вызывается по завершении сеанса пользователя.
    • Application_OnStart. Вызывается при первом запросе пользователем страницы.
    • Application_OnEnd. Вызывается при отключении IIS.

    Объект Application также используется для хранения переменных, не меняющих свое состояние на протяжении всей работы веб-сайта. Объект Application остается активным с момента первого запроса веб-приложения до момента отключения веб-сервера, поэтому он используется для хранения данных, необходимых для всех запросов на страницы и всех веб-сеансов.

    Простой пример ASP.

    Simple ASP Example

    11 And Hour(Now) 17 Then

    strGreeting = «Добрый вечер!»

    Обратите внимание на код в листинге, окруженный специальными символами: угловыми скобками и знаками процента ( ). Такие символы означают, что это серверный код, который выполняется перед тем, как страница будет на самом деле послана программе просмотра. Если бы Вы посмотрели в Internet Explorer на результирующий HTML-текст, то увидели бы следующее (в предположении, что сейчас еще не вечер, но уже не утро):

    Simple ASP Example

    В этом-то и состоит суть ASP. Результат исполнения кода — обыкновенный HTML! Эту страницу можно просматривать любой программой просмотра: не только Internet Explorer, но и, например, Netscape Navigator. Иными словами, ASP предоставляет разработчику подлинную платформенную независимость

    У представленного кода есть еще несколько особенностей. Обратите внимание на самую верхнюю строчку — она определяет, на каком языке написан сценарий на данной странице:

    Скорее всего, Вы будете писать свои сценарии на VBScript, но ASP поддерживает и JavaScript. В отличие от сценариев на клиентской стороне, здесь выбор языка абсолютно не создает проблем совместимости с различными программами просмотра, поскольку весь код исполняется на сервере.

    А теперь обратите внимание на ту строку, где и происходит генерация HTML-текста. Здесь для вывода приветствия используется переменная:

    Переменная strGreeting заключена в угловые скобки со знаками процента, как и весь остальной серверный код, но, кроме того, ей предшествует знак равенства. Такая конструкция играет важную роль в ASP, указывая, что в данное место HTML-страницы нужно вставить текущее значение этой переменной.

    Объекты и компоненты.На самом простом уровне создание ASP-страницы — это ни что иное, как написание серверного кода для получения ожидаемого результата. Но VBScript не является полнофункциональным языком и, как только Вы приступаете к построению более сложных страниц, его выразительных средств начинает не хватать. Так, в VBScript нет встроенных функций доступа к данным; не умеет он и открывать текстовые файлы. Собственно говоря, в VBScript отсутствуют какие-либо встроенные средства доступа к каким бы то ни было внешним источникам данных. Так как же в таком случае при помощи ASP выполняются такие сложные действия, как доступ к данным? Ответ будет таким: нужно дополнить VBScript объектами и компонентами ASP.

    ASP-объекты и компоненты — это не что иное, как компоненты ActiveX, подобные обычным DLL ActiveX, с которыми Вы наверняка работали в Microsoft Visual Basic. Различие между объектами и компонентами ASP состоит в том, каким образом они появляются в программе. ASP-объекты — это элементы управления ActiveX, которые в коде на VBScript доступны всегда: их не нужно создавать явно. В число объектов ASP входят Application, Session, Request, Response и Server. А вот ASP-компоненты представляют собой DLL, существующие вне структуры ASP. Эти компоненты могут быть написаны на любом языке, а некоторые по­лезные ASP-компоненты просто поставляются в комплекте с Visual InterDev. ASP-компо­ненты нужно явно создавать в коде. ASP поддерживает компоненты Database Access, File Access, Browser Capabilities, Ad Rotator и Content Linking.

    Файл GLOBAL.ASA.Одна из главных трудностей разработчика для Интернета, независимо от того, какую технологию он использует, состоит в том, как сложно создать в Интернете настоящее приложение. Взаимодействие программы просмотра и Web-сервера представляет собой по сути лишенную состояния транзакцию, в ходе которой сервер посылает клиенту Web-страницу и затем забывает о его существовании. Когда клиент запрашивает другую Web-страницу, сервер ничего не помнит о предыдущем запросе. Коренная проблема для всех Web-приложений такова: как показать, что это именно приложение?

    Определить приложение в среде Microsoft Windows довольно просто. Приложение запуска­ется двойным щелчком значка и завершается, когда в меню File выбран пункт Exit. В проме­жутке между двумя этими событиями данные хранятся в переменных. Но для Интернет-при­ложений это не так. Как определить, когда приложение начинается, а когда заканчивается? Можно сказать, что приложение начало работу, если пользователь зашел на узел и просмат­ривает одну из его страниц. Но что если он переходит к другому узлу, а через пять минут возвращается? Приложение все еще активно? А если пользователь отсутствовал час или два?

    Проблема определения моментов запуска и завершения приложения оказывает серьезное влияние на правильное управление переменными и последовательностью выполнения. К счастью, ASP предлагает решение. Оно состоит в том, что для определения начала и завер­шения — как всего приложения, так и отдельных пользовательских сессий — используется специальный файл под названием GLOBAL.ASA. На этот файл возложено реагирование на четыре ключевых события узла: Application_OnStart (запуск приложения), Application_OnEnd (завершение приложения), Session_OnStart (начало сессии) и Session_OnEnd (завершение сессии). В листинге 4.2 приведен типичный файл GLOBAL.ASA.

    Файл GLOBAL.ASA.

    ‘Название события Описание

    ‘SessionOnStart Происходит, когда пользователь в первый раз вы-

    ‘ полняет любую страницу Вашего приложения

    SessionOnEnd Происходит, когда превышен лимит времени,

    ‘ в течение которого пользователь не обращается

    ‘ к страницам Вашего приложения, или если имел

    ‘ место явный выход


    ‘Application_OnStart Происходит один раз, когда любой

    ‘ пользователь впервые выполняет первую страницу

    ‘Application_OnEnd Происходит один раз при остановке Web-сервера

    Вопрос по azure, webrole, application-start, onstart &#8211 В чем разница между событием webrole onStart () и событием application_Start () global.asax?

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

    Если я создаю проект облачного сервиса в Visual Studio и добавляю веб-роль для приложения MVC, в приложении MVC я вижу «WebRole.cs» файл. Однако когда я запускаю приложение MVC в качестве отправной точки, а затем хочу включить его для Azure, щелкните правой кнопкой мыши проект и выберите «Добавить проект облачной службы Windows Azure », WebRole.cs не создается.

    Так, куда я мог бы пойти, чтобы вещи произошли на начальном событии WebRole? Событие Application_Start () файла Global.asax?

    Если да, то’Разница между Application_Start () в Global.asax и методом onStart () веб-ролей?

    Мы нашли следующий пост, который предлагает частичное объяснение:Что запускается первым Application_Start или WebRole ‘с OnStart?

    Так что, если этоВ случае, когда событие onStart WebRole происходит перед Application_Start () в Global.asax, что произойдет, если я захочу запустить некоторый код для события onStart () в проекте, где я ‘Позже вы включили приложение для Azure?

    В вашей роли может быть один класс точки входа, унаследованный от класса RoleEntryPoint. Обычно workerrole.cs или webrole.cs наследуются от этого.

    Вы можете дать любое имя класса, если оно унаследовано от RoleEntryPoint.

    Событие OnStart этого класса запускается, когда ваша роль становится готова. Вы можете написать свою логику инициализации здесь до запуска приложения. Это может быть инициализация контейнеров IoC, диагностическая конфигурация Windows Azure или что-то еще.

    Событие Application_Start наступает при первом посещении вашего сайта. Ваша роль уже в состоянии готовности.

    Возможно, я неправильно понимаю вопрос здесь, поэтому, пожалуйста, дайте мне знать, если так.

    Конечно, вы можете начать с обычного проекта ASP.NET, а затем преобразовать его для запуска в веб-роли Windows Azure. WebRole.cs isn ‘Технически требуется — роль должна начинаться без него. Но если вы хотите внедрить некоторую логику как часть экземпляра ролиВ процессе запуска вы можете добавить класс WebRole, унаследованный от RoleEntryPoint, и переопределить OnStart (). Там вы можете выполнять такие действия, как настройка диагностики, создание таблиц или очередей хранения Windows Azure и т. Д.

    Как правило, я бы хотел поместить логику конфигурации / начальной загрузки в веб-роль ».s OnStart () — более специфичный для платформы конфиг / начальной загрузки.

    Когда там’нет расширения класса RoleEntryPoint веб-рольбудет работать очень хорошопросто не запускается дополнительный код вместо OnStart() Run() а также . OnStop()

    Application_Start() полностью не связан с Azure и полностью игнорируется средой выполнения Azure.Это всего лишь часть проводки ASP.NET. Вы можете легко иметь Application_Start() безоговорочно выбрасывая исключение и выигралЗапретить запуск вашей веб-роли, все HTTP-запросы не будут выполнены.

    Имейте в виду, что, начиная с SDK 1.3, режимом по умолчанию является «Режим IIS » где полезная нагрузка веб-роли, содержащая RoleEntryPoint потомок выполняется в одном процессе (WaIISHost.exe), а код ASP.NET — в другом процессе. Процесс с RoleEntryPoint сначала запускается средой выполнения Azure, запускается OnStart() и входит в бесконечный цикл в Run() затем экземпляр открывается для HTTP-запросов. Если вы используете IIS 7.5 и «автоматический старт» включен у вас может быть Application_Start() выполнено ранее, но в противном случае вы выигралииметь Application_Start() выполняется до первого запроса.

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

    Что такое код asp application_onstart

    Описание объекта Application

    Вы можете использовать данный метод для того, чтобы сделать доступной информацию между всеми пользователями данного приложения. Основанное на ASP приложение определено как все .asp-файлы в виртуальной директории и всех ее поддиректориях. Из-за того, что объект Application может быть доступен («зашарен») более чем одному пользователю, то в нем предусотренно два метода — Lock и Unlock (заблокировать и разблокировать) для того, чтобы быть уверенным, что сразу несколько пользователей не смогут попытаться изменять свойства одновременно.

    Вы можете хранить свои значения в коллекциях данного объекта: Application.Contents и Application.staticObjects. Информация, сохраненная в коллекции Application доступны через приложение. Следующий скрипт демонстрирует запись двух типов переменных.

    Application(«greeting») = «Добро пожаловать на наш вэб-сервер!»
    Application(«num») = 25
    %>

    Для каждой из этих переменных предполагается их членство в коллекции Application Contents.

    Вы можете также связать компонент с переменной. Если вы связываете сомпонент к переменной с помощью объекта Server.CreateObject, то переменная будет членом коллекции Application.Contents. Если переменная связана с тэгом , то переменная будет членом коллекции Application StaticObjects.

    Если вы связываете конкретный компонент с переменной в коллекцией Application Contents Collection и используете Visual Basic Scripting Edition как основной язык написания скриптов, вы должны использовать ключевое слово Set. Это иллюстрированно следующим примером.

    Вы можете также определить методы и свойства компонента MyComponent следующим скриптом

    или путем создания локальной копии объекта и использования его следующим образом:

    Set MyLocalObj1 = Application(«Obj1»)
    MyLocalObj1.MyObjMethod
    %>

    Другой способ, чтобы создать объект с использованием тэга в файле Global.asa. Для более полной информации смотрите описание Global.asa.

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


    Set Application(«var1») = Session
    Set Application(«var2») = Request
    Set Application(«var3») = Response
    Set Application(«var4») = Server
    Set Application(«var5») = Application
    Set Application(«var6») = ObjectContext
    %>

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

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

    —file1.asp—

    ‘Создаем и инициируем массив
    dim MyArray()
    Redim MyArray(5)
    MyArray(0) = «привет!»
    MyArray(1) = «какая-либо другая строка»

    ‘Запоминание массива в объекте Application
    Application.Lock
    Application(«StoredArray») = MyArray
    Application.Unlock

    —file2.asp—

    ‘Получение массива из объекта Application
    ‘и модицикация второго элемента
    LocalArray = Application(«StoredArray»)
    LocalArray(1) = » Люди!»

    ‘вывод строки «привет! Люди!»
    Response.Write(LocalArray(0)&LocalArray(1))

    ‘Перезапись массива в объект Application
    ‘Данное действие перепишет значения в StoredArray на новые
    Application.Lock
    Application(«StoredArray») = LocalArray
    Application.Unlock
    %>

    Следующий пример использует переменную NumVisits для хранения числа посещений, когда страница была получена клиентом. Метод Lock вызывается тогда, когда есть возможность того, что к переменной NumVisits может возникнуть паралелльное обращение. Вызывая метод Unlock вы разрешаете обращаться к данной переменной (объекту Application) другим пользователям.

    Application.Lock
    Application(«NumVisits») = Application(«NumVisits») + 1
    Application.Unlock
    %>

    Вы посетитель этой страницы!

    Коллекция Application. Contents

    Коллекция Contents группирует все элементы, которые были добавлены приложением через команды скрипта. Вы можете использовать коллекцию Contents чтобы получить список элементов, которые были получены приложением или чтобы указать какой из элементов будет использован в данной операции.

    ключ
    Указанное имя элемента для его получения.

    Коллекция Application.Contents содержит те элементы которые были определены на уровне приложения без использования тэга . Это касается обеих объектов — созданных с использованием Server.CreateObject и с использованием скалярных переменных установленных через определение Application. В следующем скрипте, к примеру, оба и MyVar и MyObj будут членами коллекции Application.Contents.

    Application(«MyVar») = «Привет!»
    Set Application(«MyObj») = Server.CreateObject(«MyComponent»)
    %>

    Коллекция Application.Contents поддерживает циклы типа For. Each и For. Next.
    Следующие два примера иллюстрируют каждый из вышеуказанных методов циклов использования Application.Contents.

    For Each Key in Application.Contents
    response.write («key»)
    Next Key
    %>

    For i = 1 to Application.Contents.Count
    response.write(«key»)
    Next Key
    %>

    Коллекция Application. StaticObjects

    Коллекция StaticObjects содержит все объекты, созданные с использованием тэга и объекта Application. Вы можете использовать коллекцию для того, чтобы определить значения указанных свойств для объекта или создать цикл по коллекции и получить все свойства для всех статических объектов.

    ключ
    Указанное имя элемент для обращения к нему.

    Вы можете использовать управление циклом чтобы перебирать ключи в коллекции StaticObjects. Это продемонстрированно следующим примером:

    For Each ObjProp in Application.StaticObjects
    response.write(ObjProperty & » : » & Application.StaticObjects(ObjProp) & «
    «)

    Метод Application. Lock

    Метод Lock блокирует для других клиентов переменные, хранимые в объекте Application от изменеия. Потому, как только один клиент может в данный момент времени получить доступ к переменным объекта. Если вы не вызываете метод Unlock после обработики переменных, то сервер сам разблокирует данный объект, когда истечет время (timeout) работы скрипта .asp.

    Application.Lock
    Application(«NumVisits») = Application(«NumVisits») + 1
    Application.Unlock
    %>

    Вы посетитель данной страницы.

    В предыдущем примере метод Lock предохраняет переменную NumVisits объекта Application от доступа к нему одновременно нескольких клиентов. Если бы приложение не было бы заблокированно, то два клиента попробывали-бы одновременно увеличить значение переменной NumVisits.

    Метод Application. Unlock

    Метод Unlock разблокирует заблокированные ранее переменные c помощью метода Lock.

    Application.Lock
    Application(«NumVisits») = Application(«NumVisits») + 1
    Application.Unlock
    %>

    Вы посетитель данной страницы.

    В предыдущем примере метод Unlock разблокирует переменную NumVisits объекта Application, заблокированную ранее объектом Lock от доступа к нему одновременно нескольких клиентов.

    Событие Application_OnEnd

    Данное событие активизируется, когда приложение закрывается, а точнее после события Session_OnEnd. Только встроеные объекты Application и Server доступны.

    язык_программирования
    параметр, который указывает на то, каким языком будет написан скрипт. Например JavaScript или VisualBasic.

    Вы не можете вызывать метод MapPath (объект Server) в подпрограмме Application_OnEnd.

    Событие Application_OnStart

    Данное событие активизируется, когда активируется новая сессия, такая, как, к примеру, Session_OnStart. Только встроенные объекты Application и Server доступны. Обращение к объектам Session, Request или Response в подпрограмме Application_OnStart вызовет ошибку.

    язык_программирования
    параметр, который указывает на то, каким языком будет написан скрипт. Например JavaScript или VisualBasic.

    Что такое код asp application_onstart

    The Application_OnStart event occurs before the first session is created, before the Session_OnStart event occurs. Only the Server and Application built-in objects are available. Referencing the Session, Request, or Response object in the Application_OnStart event generates an error.

    Syntax: ASP Application_OnStart Event
    Parameters: ASP Application_OnStart Event

    Specifies the scripting language used to write the event script, either Sun ONE ASP VBScript or Sun ONE ASP JavaScript. If more than one event uses the same scripting language, the events can be enclosed within a single set of tags.

    Илон Маск рекомендует:  Новшества sql server 2000
  • Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL