Россия, Брянск |
Сервер ATL
Работа с мастером проекта сервера ATL
Мастер проекта сервера ATL позволяет настраивать параметры, используемые при создании проекта. Он предлагает множество возможных вариантов проекта ATL Server. Некоторые элементы можно изменить на страницах окна свойств проекта уже после создания проекта, а некоторые нужно установить в мастере, так как позже это сделать уже будет нельзя. Visual Studio .NET позволяет корректировать любой проект, менять его тип; а вот аналогичное изменение, производимое вручную, займет много времени. При смене типа проекта вы предотвратите появление проблем, просто сохранив нужный код и вставив его в проект, сгенерированный корректным шаблоном проекта в Visual Studio .NET. Знание опций, доступных в мастере проекта сервера ATL, позволит сэкономить время и более детально ознакомиться с этим компонентом.
Параметры проекта
Во вкладке Project Settings (Параметры проекта) мастера проекта сервера ATL (см. рис. 4.7) указывается виртуальный каталог, в который будет записан проект после компиляции. Этот каталог можно сменить в любое время с помощью окна свойств проекта. Вы можете также переименовать проект и каталоги после генерирования мастером проекта сервера ATL файлов программного решения, но возможность генерации одной DLL для хранения кода ISAPI и кода веб-приложения нужно указать до окончания работы мастера.
Опытный разработчик сможет самостоятельно настроить параметры проекта для смены его типа, но с точки зрения надежности и быстроты операции разумнее изменить параметры мастера для некоторых конфигураций создаваемых двоичных файлов.
Параметры сервера в мастере проекта сервера ATL
Во вкладке Server Options (Параметры сервера) мастера проекта сервера ATL (см. рис. 4.8) устанавливается поддержка дополнительной интеграции со службами узла сервера и управление сеансами. Следует отметить, что сеанс может записываться в источник данных, имеющий провайдера OLE-DB. Это относится к разработке веб-кластера, когда требуется размещение данных сеанса внутри источника данных, если другие серверы, участвующие в поддержке веб-решения, должны иметь доступ к сеансу.
Если проект сервера ATL создан для функционирования на одном сервере, или если не требуется взаимодействие с другими веб-серверами, использующими сеанс, выберите опцию Memory-Backed Session State Services (Службы состояния сеанса, хранимые в памяти) для обеспечения более высокой производительности. Опция OLE DB-Backed Session State Services (Службы состояния сеанса, хранимые в OLE DB) позволяет расширять программное решение, т.е. установить его в распределенной аппаратной среде без изменения кода. Если программное решение требует поддержки сеансов, отметьте опцию Session Services (Службы сеансов). В зависимости от требуемого уровня поддержки выберите соответствующую опцию хранения: в OLE DB или в памяти.
При генерации мастером кода создается класс с таким же именем, как у проекта, к началу имени присоединяется символ "C", а к концу добавляется слово "Handler". Этот класс будет интерфейсом веб-приложения в IIS за счет включения в себя обработчиков тегов. Пусть проект называется atlServer4 ((см. рис. 4.7), тогда мастер для поддержки обработчиков тегов создаст класс CatlServer4Handler.
Включение любой из следующих опций во вкладке Server Options (Параметры сервера) мастера позволит добавить в класс обработчик кода, объявляющий и инициализирующий указатели на соответствующий класс поддержки.
- Blob Cache. Добавляет указатель на экземпляр класса ImemoryCache для управления случайными участками памяти.
- File Cache. Добавляет указатель на экземпляр класса IfileCache для управления именами файлов.
- Data Source Cache. Добавляет классы в проект ATL Server и проект ISAPI для управления кэшированием подключений OLE DB каждого потока.
- Predefined Performance Counters. Добавляет классы для интеграции проекта со счетчиками производительности perfmon.
- Browser Capabilities Support. Добавляет указатель на экземпляр класса IbrowserCapsSvs для управления возможностями браузера.
Если в мастере выбраны опции File Cache (Кэш файлов), Blob Cache (Кэш памяти) и Browser Capabilities Support (Поддержка возможностей браузера), а проект называется SimpleATLServer, то будет сгенерирован класс CSimpleATLServerHandler и записан в заголовок SimpleATLServer.h. В частной секции класса CSimpleATLServerHandler будут сгенерированы следующие объявления с комментариями перед кодом:
// File cache support // CComPtr<IFileCache> m_spFileCache; // Blob cache support // CComPtr<IMemoryCache> m_spBlobCache; // Data Source cache support // CComPtr<IBrowserCapsSvc> m_spBrowserCaps;
Примечание. В приведенном коде указатель Browser Capabilities Support (Поддержка возможностей браузера) неправильно определен в комментарии как поддержка кэша источника данных, что привело к незначительной ошибке в шаблоне мастера проекта сервера ATL.
При использовании указателей на File Cache (Кэш файлов), Blob Cache (Кэш памяти) и Browser Capabilities Support (Поддержка возможностей браузера) с каждого из них нужно снять статус комментария. Указатели инициализируются в общей функции ValidateAndExchange. Она включается в каждый класс обработчика, генерируемый мастером проекта сервера ATL, если отмечена опция Validation Support (Поддержка подтверждения) во вкладке Application Options (Параметры приложения) (см. следующий раздел). С фрагментов кода, отвечающих за инициализацию соответствующего указателя, также нужно снять статус комментария.
HTTP_CODE ValidateAndExchange() { // TODO: Put all initialization and validation code here // Set the content-type m_HttpResponse.SetContentType("text/html"); // uncomment the service initialization(s) if you want to use // a service that was generated with your ISAPI extension // Get the IFileCache service from the ISAPI extension // if (FAILED(m_spServiceProvider->QueryService // (__uuidof(IFileCache), // &m_spFileCache))) // return HTTP_FAIL; // Get the IMemoryCache service from the ISAPI extension // if (FAILED(m_spServiceProvider->QueryService // (__uuidof(IMemoryCache), // &m_spBlobCache))) // return HTTP_FAIL; // Get the IBrowserCapsSvc service from the ISAPI extension // if (FAILED (m_spServiceProvider->QueryService // (__uuidof(IBrowserCapsSvc), // &m_spBrowserCaps))) // return HTTP_FAIL; return HTTP_SUCCESS; }Листинг 4.1.
В ассоциированное расширение ISAPI следует добавить код для поддержки элементов, выбранных во вкладке Server Options (Параметры сервера) мастера. В отличие от кода класса обработчиков код поддержки в расширении ISAPI не является закомментированным, он входит в программное решение независимо от того, используется он или нет. Не включайте поддержку функциональности – это позволит сократить количество ресурсов.
Поддержка файлового кэширования добавляет указатель класса для поддержки функций управления указателями файлов, относящихся к чтению и записи файлов. Непосредственно содержимое файла не хранится в классе кэша; он содержит информацию о расположении файлов, их именах и размерах. При удалении элементов из кэша они удаляются с жесткого диска, поэтому кэширование файлов предназначено только для управления временными файлами.
Кэш памяти необходим для взаимодействия с фрагментами памяти переменного размера в отличии от других классов кэширования памяти ATL Server, поддерживающих фрагменты памяти определенного размера.
Кэш источника данных обеспечивает функциональность, присущую и другим классам кэширования, исключая хранение подключений к источникам данных.
При выборе опции Predefined Performance Counters (Предопределенные счетчики производительности) в расширении ISAPI размещается код, реализующий обновление счетчиков ISAPI для perfmon согласно взаимодействию веб-приложения с IIS. Разработчик не участвует в написании кода, весь код, необходимый для обеспечения функциональности, генерируется мастером в файле реализации расширения ISAPI.
Предопределенными счетчиками производительности являются следующие.
- Active Threads (Активные потоки). Активные потоки, используемые процессом веб-приложения.
- Average Response Time (Среднее время ответа). Усредненное время возврата HTTP-ответа веб-приложением.
- Current Queued Requests (Текущие запросы в очереди). HTTP-запросы, ожидающие обработки.
- Maximum Queued Requests (Максимальное количество запросов в очереди). Максимальное количество HTTP-запросов в очереди.
- Server Failed Requests (Ошибочные запросы сервера). Запросы, обработка которых невозможна, включая ошибки "Файл не найден" (404) и "Доступ запрещен" (403).
- Server Requests Per Second (Количество запросов сервера в секунду). Количество запросов, поступивших на веб-сайт за секунду.
- Server Total Requests (Общее количество запросов сервера). Общее количество запросов, полученных веб-сайтом IIS.
Для поддержки возможностей браузера имеется указатель класса IbrowserCapsSvc и код инициализации, предназначенный для настройки указателя на IbrowserCapsSvc. Если указатель на указатель класса IbrowserCaps передается функции GetCaps класса IbrowserCapsSvc вместе с указателем на контекст сервера, то экземпляр IbrowserCaps позволяет выполнить запрос возможностей браузера. Эта информация определяется экземпляром класса IbrowserCaps с помощью сравнения значения HTTP_USER_AGENT, отправленного веб-серверу с запросом HTTP, с соответствующим значением в файле browsercap.ini (он обычно находится в папке $(windows)\system32\inetsrv\ ). В файле browsercap.ini приведен HTTP User Agent и определены его параметры. Например, для браузера Internet Explorer (IE) 5 в файле browsercap.ini указано следующее:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.0 [IE 5.0] browser=IE Version=5.0 majorver=5 minorver=0 frames=True tables=True cookies=True backgroundsounds=True vbscript=True javaapplets=True javascript=True ActiveXControls=True Win16=False beta=True AK=False SK=False AOL=False Update=False [Mozilla/4.0 (compatible; MSIE 5.*; Windows 95*)] parent=IE 5.0 platform=Win95 beta=True [Mozilla/4.0 (compatible; MSIE 5.*; Windows 98*)] parent=IE 5.0 platform=Win98 beta=True [Mozilla/4.0 (compatible; MSIE 5.*; Windows NT*)] parent=IE 5.0 platform=WinNT beta=True [Mozilla/4.0 (compatible; MSIE 5.*; Windows 2000*)] parent=IE 5.0 platform=Win2000 beta=True [Mozilla/4.0 (compatible; MSIE 5.*)] parent=IE 5.0Листинг 4.2.
Опция Resource Language (Язык источника) во вкладке Server Options (Параметры сервера) обеспечивает поддержку использования других языков для генерирования текста копии в файлах источников проекта. Необходимо установить Visual Studio .NET с поддержкой языков для нужного ресурса, чтобы открыть доступ к этой опции.