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

asp.net — Как отключить буферизацию в IIS для приложения MVC 4 Web API

У меня есть приложение MVC 4 Web API, работающее на IIS 7. Чтобы проанализировать, почему приложение работает медленно, я пробовал профилировать приложение и не обнаружил серьезных узких мест. По-видимому, ответ получает буферизацию, а время ожидания до сброса вызывает задержку. Я узнал, что существует настройка — aspBufferingOn, которая может быть установлена в false в IIS, чтобы отключить буферизацию. В документации говорится, что этот параметр должен быть доступен в функции «ASP» в представлении Feature Manager IIS. Но я не вижу функцию по имени «ASP».

Где можно установить значение параметра «aspBufferOn» для моего приложения веб-API в диспетчере IIS?

    2 1
  • 2 июн 2020 2020-06-02 09:27:03
  • Aadith

1 ответ

Что касается вашего вопроса о функции ASP

Вам нужно перейти в меню «Старт» в режиме поиска. Включить или выключить Windows-функции и включить его.

Подробнее о AspBufferingOn

Это свойство указывает, будет ли буферизирован вывод из приложения ASP. Если значение TRUE (по умолчанию), все выходные данные из приложения собираются в буфере до сброса буфера в браузер клиента. Если для этого свойства установлено значение FALSE, вывод из сценариев ASP будет записан в клиентский браузер по мере его появления.

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

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

Важно. Если вы установили IIS 5.0 путем обновления с предыдущей версии IIS, настройка по умолчанию для этого свойства будет FALSE, а не TRUE.

Тип данных Boolean

Значение по умолчанию TRUE

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

авиационные средства поражения

Словарь: Словарь сокращений и аббревиатур армии и спецслужб. Сост. А. А. Щелоков. — М.: ООО «Издательство АСТ», ЗАО «Издательский дом Гелеос», 2003. — 318 с.

алкогольный синдром плода

Австралийский совет профсоюзов

Словарь: С. Фадеев. Словарь сокращений современного русского языка. — С.-Пб.: Политехника, 1997. — 527 с.

Арабская социалистическая партия

автоматический сигнализатор примесей

аналоговая система передачи

Алтайский союз предпринимателей

азиатский способ производства

Автономная социалистическая партия

антифрикционная самосмазывающаяся пластмасса

Словарь: С. Фадеев. Словарь сокращений современного русского языка. — С.-Пб.: Политехника, 1997. — 527 с.

аварийная система проектирования

артиллерийский сигнальный пост

Словарь: Словарь сокращений и аббревиатур армии и спецслужб. Сост. А. А. Щелоков. — М.: ООО «Издательство АСТ», ЗАО «Издательский дом Гелеос», 2003. — 318 с.

  1. АСП
  2. АСП-

аппаратура сигнализации первопричины

Ассоциация совместных предприятий

Словарь: С. Фадеев. Словарь сокращений современного русского языка. — С.-Пб.: Политехника, 1997. — 527 с.

Словарь: С. Фадеев. Словарь сокращений современного русского языка. — С.-Пб.: Политехника, 1997. — 527 с.

Ассоциация скаутов Петербурга

Александр Сергеевич Пушкин

автоматизированная система проектирования;
автоматическая система проектирования

Словарь: С. Фадеев. Словарь сокращений современного русского языка. — С.-Пб.: Политехника, 1997. — 527 с.

авиационный самолётный прицел
авиационный стрелковый прицел

Словарь: Словарь сокращений и аббревиатур армии и спецслужб. Сост. А. А. Щелоков. — М.: ООО «Издательство АСТ», ЗАО «Издательский дом Гелеос», 2003. — 318 с.

авиасигнальный пост
авиационный сигнальный пост

Словари: Словарь сокращений и аббревиатур армии и спецслужб. Сост. А. А. Щелоков. — М.: ООО «Издательство АСТ», ЗАО «Издательский дом Гелеос», 2003. — 318 с., С. Фадеев. Словарь сокращений современного русского языка. — С.-Пб.: Политехника, 1997. — 527 с.

автоматический стрелковый прицел

артиллерийская стрелковая подготовка

Албанская социалистическая партия

Словарь: С. Фадеев. Словарь сокращений современного русского языка. — С.-Пб.: Политехника, 1997. — 527 с.

  1. АСП
  2. АСП-

авиационный спасательный пояс

авиа, в маркировке

  1. АСП
  2. АСП-

Источник: http://www.oil-industry.ru/static_print.asp? >

  1. АСП-

Ауди Сервис Пенза

авто, г. Пенза, организация

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

автоматизированная система поставок

адресная социальная помощь

автоматический ступенчатый пуск

аналог собственноручной подписи

Словарь сокращений и аббревиатур . Академик . 2015 .

Смотреть что такое «АСП» в других словарях:

АСП — трёхбуквенная аббревиатура. АСП аварийная система проектирования АСП авиасигнальный пост, авиационный сигнальный пост АСП (воен.) авиационные средства поражения АСП авиационный самолётный прицел, авиационный стрелковый прицел АСП или АСП… … Википедия

АСП- — аппаратура сигнализации первопричины АСП Источник: http://imwp.tpi.ac.ru/acuz zakaz.html АСП Пример использования АСП 01Р АСП АСП авиационный спасательный пояс авиа, в маркировке … Словарь сокращений и аббревиатур

АСП РФ — Ассоциация сельских поселений Российской Федерации организация, РФ Источник: http://www.kmo.ru/pages.asp?dip=191 … Словарь сокращений и аббревиатур

асп — [اسپ] 1. чорпои хонагӣ, сумдори саворӣ ва боркаш; аспи бидав аспи даванда; аспи бодпой аспи тезрав; аспи боркаш аспе, ки бо он бор мекашанд; аспи бузкашӣ // аспи кӯпкоригӣ аспи махсуси мусобиқаи бузкашӣ; аспи даврӣ аспе, ки дар муддати муайян… … Фарҳанги тафсирии забони тоҷикӣ

аспӣ — [اسپي] мансуб ба асп; ҷувози аспӣ ҷувозе, ки онро асп мегардонад … Фарҳанги тафсирии забони тоҷикӣ

Асп — (Vallée d Aspe) густонаселенная и знаменитая своею живописностью долина на северной стороне Пиреней, во французском Нижнепиренейском департаменте. Здесь находится множество минеральных источников. Долина простирается от Пик д Асп (2500 м) к С.… … Энциклопедический словарь Ф.А. Брокгауза и И.А. Ефрона

аспід — I а, ч. Рід отруйних змій. II у, ч., заст. Різновидність сланцю … Український тлумачний словник

аспідіум — у, ч., заст. Назва деяких папоротей … Український тлумачний словник

АСП — аварийная система проектирования аварийно спасательная партия авиационный сигнальный пост Австралийский совет профсоюзов автоматический стрелковый прицел Автономная социалистическая партия (Франция) антифрикционная самосмазывающаяся пластмасса… … Словарь сокращений русского языка

асп — система автоматизированного проектирования (САПР) Computer A >Гірничий енциклопедичний словник

Перевод кода: ASP.NET Server.Transfer в PHP

Как мне это сделать в PHP?

(добавить ‘;’ для C #)

РЕДАКТИРОВАТЬ:

Важно, чтобы URL-адрес оставался таким же, как и раньше; вы знаете, для Google. В моей ситуации у нас есть куча .html-файлов, которые мы хотим передать, и для клиента важно, чтобы адресная строка не менялась.

Насколько я знаю, PHP не обладает реальной способностью передавать, но вы можете получить тот же эффект, используя include () или require () следующим образом:

Самый простой способ – использовать перенаправление header .

Изменить. Или вы можете просто включить файл и выйти, если вы не хотите использовать HTTP-заголовки.

How to turn off buffering in IIS for MVC 4 Web API application

I have a MVC 4 Web API application running on IIS 7. To analyse why the application is slow, I tried profiling the application and found no major bottlenecks. Apparently, the response is getting buffered and the wait time before flush is causing the delay. I learnt that there a setting — aspBufferingOn which can be set to false in IIS to disable buffering. Documentation says that this setting should be available under «ASP» feature in IIS Manager’s Feature view. But I dont see a feature by name «ASP» there.

Where can I set the value of «aspBufferOn» setting for my Web API application in IIS Manager?

1 Answer 1

Regarding to your ASP feature question

You need to go to Start then in search type Turn Windows Features on or off and enable it.

More on AspBufferingOn

This property specifies whether output from an ASP application will be buffered. If the value is TRUE (default), all output from the application is collected in the buffer before the buffer is flushed to the client browser. If this property is set to FALSE, output from ASP scripts will be written to client browser as it becomes available.

With buffering on, the ASP application will have to completely process the ASP script before any output is received by the client browser. For this reason, applications for which buffering has been turned on could seem slower to users than those applications for which buffering is turned off, even though the total time taken for the buffered script is less. Therefore, if buffering is turned on, you should consider using the Response.Flush method to pass the user pieces of content as the script is being processed.

Note If buffering is turned off, any methods that modify existing HTTP headers, or generate new headers, must be executed before the content body is sent to the client browser. If buffering is turned on, this restriction is unnecessary.

Important If you installed IIS 5.0 by upgrading from a previous version of IIS, the default setting for this property will be FALSE, not TRUE.

Как отключить буферизацию в IIS для приложения MVC 4 Web API

У меня есть приложение MVC 4 Web API, работающее на IIS 7. Чтобы проанализировать, почему приложение работает медленно, я попытался профилировать приложение и не обнаружил серьезных узких мест. По-видимому, ответ буферизуется, и время ожидания до сброса вызывает задержку. Я узнал, что есть настройка — aspBufferingOn, которая может быть установлена в false в IIS, чтобы отключить буферизацию. В документации сказано, что этот параметр должен быть доступен в разделе «ASP» в представлении «Функции» диспетчера IIS. Но я не вижу функции по имени «ASP» там.

Где я могу установить значение параметра «aspBufferOn» для приложения Web API в диспетчере IIS?

1 ответ

Что касается вашего вопроса о функции ASP

Вам нужно перейти в меню «Пуск», затем в поле поиска Включить или отключить компоненты Windows и включить его.

Подробнее о AspBufferingOn

Это свойство указывает, будет ли буферизован вывод из приложения ASP. Если значение TRUE (по умолчанию), все выходные данные из приложения собираются в буфере до того, как буфер будет сброшен в браузер клиента. Если для этого свойства задано значение FALSE, выходные данные из сценариев ASP будут записываться в браузер клиента по мере его появления.

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

Илон Маск рекомендует:  Как в Word из формата А4 сделать А5

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

Важно! Если вы установили IIS 5.0 путем обновления с предыдущей версии IIS, значением по умолчанию для этого свойства будет FALSE, а не TRUE.

Тип данных логический

Значение по умолчанию TRUE

Создание 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 aspbufferingon

Я поступил проще, ASP движок ругнулся что мол генерация страницы начата и сейчас уже нельзя менять заголовок (при включенной буферизации такого не было) Я взял этот кусок кода, где кука вешается повыше переместил и все дела. А в копаться в документации че-то в лом было.

Но это опять же к тому что «тщательнЕе надо» (© М.М. Жванецкий) скрипты писать :)

Как заставить IIS (виндовый вебсервер) возвращать chunked ответ 18.09.06 17:14
Автор: drpops Статус: Незарегистрированный пользователь
Мне нужно заставить чтоб IIS возвращал chunked ответ для тестирования локально.
Более того я знаю одного мужика который получил такой эффект и из-за этого у него некоторые проблемы. При запросе его сервер возвращает chunked ответ, если запрашивается ASP страница.
В заголовке ответа есть такое поле
Tranfer-Encoding: chunked
Ну и дальше в соответсвии с RFC
Если запрашиваетс любая статическая информация, то все как обычно. Как это у него получается -объяснит не может.
Вопрос:
Кто нибудь знает как это сделать? Мне этот режим нужен для тестов.
Есть подозрение, что как-то можно в ASP коде страницы как-то это задать. В MSDN порылся ничего не нашел (плохо искал?). Может кто-нибудь подкинет хоть какую-нибудь инфу по теме?

Кста, в мсдн нашел только как разрешать chunked режим (переменная AspEnableChunkedEncoding). Но она и так включена по умолчанию.

Chunked encoding придуман для того, чтобы отдавать страницы, размер которых неизвестен заранее 18.09.06 21:20
Автор: amirul Статус: The Elderman
> Вопрос:
> Кто нибудь знает как это сделать? Мне этот режим нужен для
> тестов.

Чаще всего, сервак буферизирует какую то часть страницы (около килобайта), если за этот килобайт страница закончилась, то transfer-encoding используется identity, а длина указывается в Content-Length.
Иначе формируется хэдер, в котором указано chunked TE, а уже полученные данные загоняются собственно в первый chunk.

> Есть подозрение, что как-то можно в ASP коде страницы
> как-то это задать. В MSDN порылся ничего не нашел (плохо
> искал?). Может кто-нибудь подкинет хоть какую-нибудь инфу
> по теме?
>
> Кста, в мсдн нашел только как разрешать chunked режим
> (переменная AspEnableChunkedEncoding). Но она и так
> включена по умолчанию.

Есть подозрение, что если ты сгенерируешь (обязательно скриптом, ибо размер статической html страницы серверу известен всегда) страницу на несколько десятков килобайт, то она начнет отдаваться еще до того, как ты закончишь генерацию и как раз в chunked TE.

Да наверное больше. Может порядка 64К? во всяком случае 19.09.06 11:32
Автор: drpops Статус: Незарегистрированный пользователь
> Чаще всего, сервак буферизирует какую то часть страницы
> (около килобайта), если за этот килобайт страница
Да наверное больше. Может порядка 64К? во всяком случае

> Есть подозрение, что если ты сгенерируешь (обязательно
> скриптом, ибо размер статической html страницы серверу
> известен всегда) страницу на несколько десятков килобайт,
> то она начнет отдаваться еще до того, как ты закончишь
> генерацию и как раз в chunked TE.
Очень здравая мысль, спасибо. Я и сам это смутно продозревал, но как-то до конца не додумал. Обязательно попробую и сообщу о результатах.

Кста, тот клиент говорил что у него страницы получаются по 300 с чем-то килобайт, так что вполне возможно что IIS использует chunked режим при превышении какого-то порога
Хотя вот я сейчас только что попробовал у себя IIS отдал обычным способом страницу
Content-Length: 115621
так что есть над чем подумать. Может это как-то зависит от наличия физ памяти на компе или еще от чего.

Получил я chunked режим. Ура. 19.09.06 12:27
Автор: drpops Статус: Незарегистрированный пользователь
Получил я chunked режим. Ура.
если в начало ASP кода ставишь
Response.Buffer = false
то страница отдается в chunked режиме при превышении какого-то размера. Правда появляются кое-какие ограничения по АСП коду. Например нельзя писать что нибудь в заголовок (например куку) если страница уже начала формироваться и заголовок уже сформирован.
Но это легко обходится. Типа аккуратнее писать надо :)
Когда уже написал, у меня появилась мысль 19.09.06 13:48
Автор: amirul Статус: The Elderman
Что перед переключением в chunked режим ожидается не какой то конкретный размер, а какое то кокретное время. Вся идея chunked режима в том, что начать передавать как можно быстрее, чтобы клиент мог решить нужно оно ему или нет. Если вся страница сгенерилась очень быстро, то соответственно и передастся она вся, а вот если скрипт разбавить sleep-ами, то вполне возможно IIS все таки перескочил бы в chunked без дополнительных усилий

> Получил я chunked режим. Ура.
> если в начало ASP кода ставишь
> Response.Buffer = false
> то страница отдается в chunked режиме при превышении
> какого-то размера. Правда появляются кое-какие ограничения
> по АСП коду. Например нельзя писать что нибудь в заголовок
> (например куку) если страница уже начала формироваться и
> заголовок уже сформирован.

Заголовки писать можно, но не все, а только entity-header-ы. Например дату последнего изменения (для кеша) можно указать после генерации. Эти хедеры попадают в трейлер chunked передачи и абсолютно равноправны с прочими хэдерами.

> Но это легко обходится. Типа аккуратнее писать надо :)
Ну вообще да, message-header-ы (типа той же куки) не шибко зависят от контента и могут быть посланы заранее, а entity-header-ы слать можно.

Чайницкий вопрос можно ;): а что такое «entity-header-ы» и в. 19.09.06 14:20
Автор: drpops Статус: Незарегистрированный пользователь
> Заголовки писать можно, но не все, а только
> entity-header-ы. Например дату последнего изменения (для
> кеша) можно указать после генерации. Эти хедеры попадают в
> трейлер chunked передачи и абсолютно равноправны с прочими
> хэдерами.
Чайницкий вопрос можно ;): а что такое «entity-header-ы» и в чем их принципиальное отличие от других хедеров
Дык rfc2616 в помощь 19.09.06 18:21
Автор: amirul Статус: The Elderman
> Чайницкий вопрос можно ;): а что такое «entity-header-ы» и
> в чем их принципиальное отличие от других хедеров

Ы?

Спасибо за помошь :) rfc2616 — мой любимый rfc :) 19.09.06 19:58
Автор: drpops Статус: Незарегистрированный пользователь
Спасибо за помошь :) rfc2616 — мой любимый rfc :)
> Ы?
Честно говоря из вышесказанного непонятно куда отнести заголовок Set-Cookie и опять же не совсем ясно почему какие-то заголовки можно менять а какие нет :) Принципиального отличия не вижу.

Я поступил проще, ASP движок ругнулся что мол генерация страницы начата и сейчас уже нельзя менять заголовок (при включенной буферизации такого не было) Я взял этот кусок кода, где кука вешается повыше переместил и все дела. А в копаться в документации че-то в лом было.

Но это опять же к тому что «тщательнЕе надо» (© М.М. Жванецкий) скрипты писать :)

Да в общем то все понятно [upd] 19.09.06 22:10
Автор: amirul Статус: The Elderman
Отредактировано 19.09.06 22:14 Количество правок: 1
> Спасибо за помошь :) rfc2616 — мой любимый rfc :)
> > Ы?
> Честно говоря из вышесказанного непонятно куда отнести
> заголовок Set-Cookie и опять же не совсем ясно почему
> какие-то заголовки можно менять а какие нет :)
> Принципиального отличия не вижу.

http message может быть либо request-ом либо response-ом
И request и response состоят из start-line-а, хэдеров и тела. entity — полезная нагрузка, которая цепляется к http-сообщению. Вот и разделяются хэдеры, имеющие отношение к самому протоколу (сообщению) и хэдеры, связанные с этой самой нагрузкой. не-entity-хэдеры есть общие и у request-а и respnse-а, а есть раздельные. Вот их то и нельзя переносить в конец. Все остальные — можно.

> Я поступил проще, ASP движок ругнулся что мол генерация
> страницы начата и сейчас уже нельзя менять заголовок (при
> включенной буферизации такого не было) Я взял этот кусок
> кода, где кука вешается повыше переместил и все дела. А в
> копаться в документации че-то в лом было.

Есть такой general-header как Trailer. В трейлеры нельзя выносить хэдеры Content-Length, Transfer-Encoding и Trailer (хотя странно, последние два не являются entity хэдерами в соотвествии с тем же rfc). Просто указываешь при помощи Trailer какие хэдеры пойдут в трейлере (хотя 14.40 говорит, что ты не обязан этого делать) и сервак должен смириться с этим.

> Но это опять же к тому что «тщательнЕе надо» (© М.М.
> Жванецкий) скрипты писать :)

Почему ASP.NET не используют в крупных компаниях?

В настоящий момент С# (asp.net) имеет целый ряд преимуществ над тем, что нам дает Java (в плане удобства и синтаксиса языка). Это правда!

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

Именно по этой причине Microsoft сейчас активно начинает спариваться с Linux и везде кричит, что они его любят.

Зацикливание АСП на сервере и таймаут

Не знаю.. может кто и обсуждал уже такое, но меня сильно интересует этот вопрос. Зацикливаю вывод в АэСПэ скрипте. Отключаю буферизацию. Делаю большой тайм аут. В браузере выводит!! Это хорошо!
Но. Сервер начисто запрещает выполнение других скриптов для текущего окна (т.е. если у меня скрипт добавляющий инфу в базу запускается в этом же окне бровсера, он тупо стоит и ждёт когда выйдет таймаут для запущенного скрипта)! Никогда с таким не сталкивался. Перевернул всю инфу которая у меня есть — so nothing. Помогите решить проблему? Подскажите пжлста, что я ‘криворукий’ делаю не так.
Заранее благодарен за советы, которые градом на меня посыпятся

Захватите скрытое значение поля, которое установлено в документе. Уже в коде asp.net.

Мне нужно получить доступ к скрытому значению полей в коде позади, обычно это легко, но эта переменная задается во время события jQuery document.ready, и мне нужно получить к ней доступ при загрузке страницы. до сих пор я пробовал Page_Load, Page_LoadComplete, Init и Prerender не повезло. Это просто невыполнимая задача?

Да, это невозможно.

(По крайней мере, с известной технологией на данный момент. Вам понадобится машина времени для получения этих данных.)

Весь код на сервере запускается для создания страницы в браузере. когда код сервера завершен, страница отправляется в браузер, а браузер анализирует страницу. Когда вся страница анализируется, происходит событие ready .

Таким образом, весь код сервера запускается до отправки страницы в браузер, и весь код Javascript запускается после отправки страницы в браузер.

(Технически возможно запустить Javascript в браузере до завершения кода сервера, но это означает, что вам нужно отключить буферизацию для ответа на сервере и полностью обработать ответ (т.е. Не Webforms или MVC), и Javascript необходимо запустить, когда страница начнет загружаться, а не в ready событие. Кроме того, вам нужна другая страница на сервере, которую Javascript может запросить отправить данные обратно на сервер, и эта страница должна запускаться без сеанса, чтобы веб-сервер может обрабатывать его параллельно с текущей страницей. Также вам нужно настроить некоторый статический класс на сервере, где данные могут быть сохранены, так что текущая страница может забрать ее, когда она поступит, и вам нужно создать какой-то вид идентификатор запроса, который Javascript может отправить обратно, чтобы определить, какой запрос должен получить данные, поскольку страница, используемая для отправки данных, не имеет сеанса. Таким образом, даже если это возможно сделать что-то похожее на то, что вы хотите, это слишком сложно быть практичным.)

Илон Маск рекомендует:  Универсальный селектор в CSS
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL