Поделиться через


Класс CGlobalModule

Определяет базовый класс для модулей HTTP глобального уровня.

Синтаксис

class CGlobalModule  

Методы

В следующей таблице перечислены методы, предоставляемые классом CGlobalModule .

Имя Описание
OnGlobalApplicationPreload Предоставляет интерфейс глобального уровня для предварительной загрузки приложения в память сервера.
OnGlobalApplicationResolveModules Представляет метод, который будет обрабатывать GlobalApplicationResolveModules событие, которое возникает при разрешении зарегистрированных модулей IIS.
OnGlobalApplicationStart Представляет метод, который будет обрабатывать GlobalApplicationStart событие, которое возникает при запуске приложения IIS.
OnGlobalApplicationStop Представляет метод, который будет обрабатывать GlobalApplicationStop событие, которое возникает при завершении работы приложения IIS.
OnGlobalCacheCleanup Представляет метод, который будет обрабатывать GlobalCacheCleanup событие.
OnGlobalCacheOperation Представляет метод, который будет обрабатывать GlobalCacheOperation событие, которое возникает при выполнении СЛУЖБ IIS операции, связанной с кэшем.
OnGlobalConfigurationChange Представляет метод, который будет обрабатывать GlobalConfigurationChange событие, которое происходит при изменении файла конфигурации.
OnGlobalCustomNotification Представляет метод, который будет обрабатывать GlobalCustomNotification событие, которое возникает при вызове модуля определяемого пользователем уведомления.
OnGlobalFileChange Представляет метод, который будет обрабатывать GlobalFileChange событие, которое возникает при изменении файла на веб-сайте.
OnGlobalHealthCheck Представляет метод, который будет обрабатывать GlobalHealthCheck событие, которое возникает при выполнении операции, связанной со работоспособностью.
OnGlobalPreBeginRequest Представляет метод, который будет обрабатывать GlobalPreBeginRequest событие, которое возникает перед вводом запроса в конвейер.
OnGlobalRSCAQuery Представляет метод, который будет обрабатывать GlobalRSCAQuery событие, которое возникает при выполнении запроса Run-Time Status and Control.
OnGlobalStopListening Представляет метод, который будет обрабатывать GlobalStopListening событие, которое возникает, когда СЛУЖБЫ IIS перестают принимать новые запросы.
OnGlobalThreadCleanup Представляет метод, который будет обрабатывать GlobalThreadCleanup событие, которое возникает при возврате iis потока в пул потоков.
OnGlobalTraceEvent Представляет метод, который будет обрабатывать GlobalTraceEvent событие, которое возникает при возникновении события трассировки.
Завершение Представляет метод, вызывающий СЛУЖБЫ IIS, когда глобальный модуль завершил обработку.

Производные классы

Этот класс не содержит производных классов.

Замечания

Класс CGlobalModule является базовым классом для модулей HTTP глобального уровня. Модули HTTP глобального уровня должны содержать класс, наследующий от CGlobalModule. CGlobalModule определяет методы, вызываемые IIS 7 для обработки уведомлений глобального уровня при возникновении событий глобального уровня. Модуль HTTP может зарегистрировать для определенных событий, определив список уведомлений в экспортируемой функции RegisterModule модуля. После завершения обработки модуля глобального уровня модуль должен использовать метод CGlobalModule::Terminate для удаления CGlobalModule экземпляров из памяти.

Пример

В следующем примере кода показано, как создать простой модуль HTTP уровня "Hello World". Модуль определяет экспортированную функцию RegisterModule , которая создает экземпляр класса, производный от CGlobalModule. Если не удается создать класс, функция завершает работу с кодом ошибки; в противном случае функция вызывает метод IHttpModuleRegistrationInfo::SetRequestNotifications для регистрации для уведомления GL_PRE_BEGIN_REQUEST .

GL_PRE_BEGIN_REQUEST При возникновении уведомления IIS вызывает метод CGlobalModule модуля::OnGlobalPreBeginRequest для обработки уведомления. Метод вызывает закрытый метод для записи события в журнал приложений Просмотр событий, а затем возвращает GL_NOTIFICATION_CONTINUE чтобы уведомить IIS продолжить обработку других уведомлений. По завершении обработки IIS вызывает метод CGlobalModule::Terminate для удаления класса из памяти.

#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>

// Create the module's global class.
class MyGlobalModule : public CGlobalModule
{
public:

    // Process a GL_APPLICATION_START notification.
    GLOBAL_NOTIFICATION_STATUS
    OnGlobalPreBeginRequest(
        IN IPreBeginRequestProvider * pProvider
    )
    {
        UNREFERENCED_PARAMETER( pProvider );
        WriteEventViewerLog( "Hello World!" );
        return GL_NOTIFICATION_CONTINUE;
    }

    VOID Terminate()
    {
        // Remove the class from memory.
        delete this;
    }

    MyGlobalModule()
    {
        // Open a handle to the Event Viewer.
        m_hEventLog = RegisterEventSource( NULL,"IISADMIN" );
    }

    ~MyGlobalModule()
    {
        // Test whether the handle for the Event Viewer is open.
        if (NULL != m_hEventLog)
        {
            // Close the handle to the Event Viewer.
            DeregisterEventSource( m_hEventLog );
            m_hEventLog = NULL;
        }
    }

private:

    // Create a handle for the event viewer.
    HANDLE m_hEventLog;

    // Define a method that writes to the Event Viewer.
    BOOL WriteEventViewerLog(LPCSTR szNotification)
    {
        // Test whether the handle for the Event Viewer is open.
        if (NULL != m_hEventLog)
        {
            // Write any strings to the Event Viewer and return.
            return ReportEvent(
                m_hEventLog,
                EVENTLOG_INFORMATION_TYPE, 0, 0,
                NULL, 1, 0, &szNotification, NULL );
        }
        return FALSE;
    }
};

// Create the module's exported registration function.
HRESULT
__stdcall
RegisterModule(
    DWORD dwServerVersion,
    IHttpModuleRegistrationInfo * pModuleInfo,
    IHttpServer * pGlobalInfo
)
{
    UNREFERENCED_PARAMETER( dwServerVersion );
    UNREFERENCED_PARAMETER( pGlobalInfo );

    // Create an instance of the global module class.
    MyGlobalModule * pGlobalModule = new MyGlobalModule;
    // Test for an error.
    if (NULL == pGlobalModule)
    {
        return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
    }
    // Set the global notifications and exit.
    return pModuleInfo->SetGlobalNotifications(
        pGlobalModule, GL_PRE_BEGIN_REQUEST );
}

Модуль должен экспортировать функцию RegisterModule . Эту функцию можно экспортировать, создав для проекта файл определения модуля (.def) или скомпилировать модуль с помощью /EXPORT:RegisterModule переключателя. Дополнительные сведения см. в пошаговом руководстве по созданию модуля HTTP Global-Level с помощью машинного кода.

При необходимости можно скомпилировать код с помощью __stdcall (/Gz) соглашения о вызове вместо явного объявления соглашения о вызовах для каждой функции.

Требования

Тип Описание
Client — IIS 7.0 в Windows Vista
— IIS 7.5 на Windows 7
— IIS 8.0 в Windows 8
— IIS 10.0 в Windows 10
Сервер — IIS 7.0 в Windows Server 2008 г.
— IIS 7.5 на Windows Server 2008 R2
— IIS 8.0 в Windows Server 2012
— IIS 8.5 на Windows Server 2012 R2
— IIS 10.0 в Windows Server 2016
Товар — IIS 7.0, IIS 7.5, IIS 8.0, IIS 8.5, IIS 10.0
— IIS Express 7.5, IIS Express 8.0, IIS Express 10.0
Header Httpserv.h

См. также

Основные классы веб-сервера
Создание модулей HTTP Native-Code
Класс CHttpModule