Bagikan melalui


Enumerasi GLOBAL_NOTIFICATION_STATUS

Menentukan nilai yang dikembalikan untuk pemberitahuan tingkat global.

Sintaks

typedef enum GLOBAL_NOTIFICATION_STATUS{  
   GL_NOTIFICATION_CONTINUE,  
   GL_NOTIFICATION_HANDLED  
};  

Anggota

Nama anggota Deskripsi
GL_NOTIFICATION_CONTINUE Menunjukkan bahwa IIS harus terus memproses pemberitahuan tingkat global tambahan.
GL_NOTIFICATION_HANDLED Menunjukkan bahwa IIS telah selesai memproses pemberitahuan tingkat global dan tidak boleh memproses pemberitahuan tingkat global tambahan.

Keterangan

GLOBAL_NOTIFICATION_STATUS Anggota enumerasi digunakan sebagai nilai pengembalian dari pemberitahuan tingkat global, dan anggota membantu mengontrol alur proses dalam alur pemrosesan pemberitahuan tingkat global. Misalnya, kembali GL_NOTIFICATION_CONTINUE dari penangan pemberitahuan tingkat global menginstruksikan IIS untuk terus memproses pemberitahuan tingkat global tambahan, sedangkan kembali GL_NOTIFICATION_HANDLED dari penangan pemberitahuan tingkat global menginformasikan IIS bahwa pemrosesan tingkat global selesai dan IIS tidak boleh memproses pemberitahuan tingkat global tambahan.

Contoh

Contoh kode berikut menunjukkan cara membuat modul HTTP tingkat global "Halo Dunia" sederhana. Modul mendefinisikan fungsi RegisterModule yang diekspor yang membuat instans kelas yang berasal dari CGlobalModule. Jika kelas tidak dapat dibuat, fungsi keluar dengan kode kesalahan; jika tidak, fungsi memanggil metode IHttpModuleRegistrationInfo::SetRequestNotifications untuk mendaftar pemberitahuan GL_PRE_BEGIN_REQUEST .

GL_PRE_BEGIN_REQUEST Ketika pemberitahuan terjadi, IIS memanggil metode CGlobalModule::OnGlobalPreBeginRequest modul untuk memproses pemberitahuan. Metode ini memanggil metode privat untuk menulis peristiwa ke log aplikasi Pemampil Peristiwa, dan kemudian kembali GL_NOTIFICATION_CONTINUE untuk memberi tahu IIS untuk terus memproses pemberitahuan lain. Saat pemrosesan selesai, IIS memanggil metode CGlobalModule::Terminate modul untuk menghapus kelas dari memori.

#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 );
}

Modul Anda harus mengekspor RegisterModule fungsi. Anda dapat mengekspor fungsi ini dengan membuat file definisi modul (.def) untuk proyek Anda, atau Anda dapat mengkompilasi modul dengan menggunakan sakelar /EXPORT:RegisterModule . Untuk informasi selengkapnya, lihat Panduan: Membuat Modul HTTP Global-Level Dengan Menggunakan Kode Asli.

Anda dapat secara opsional mengkompilasi kode dengan menggunakan __stdcall (/Gz) konvensi panggilan alih-alih secara eksplisit mendeklarasikan konvensi panggilan untuk setiap fungsi.

Persyaratan

Jenis Deskripsi
Klien - IIS 7.0 di Windows Vista
- IIS 7.5 di Windows 7
- IIS 8.0 di Windows 8
- IIS 10.0 pada Windows 10
Server - IIS 7.0 di Windows Server 2008
- IIS 7.5 di Windows Server 2008 R2
- IIS 8.0 di Windows Server 2012
- IIS 8.5 di Windows Server 2012 R2
- IIS 10.0 di Windows Server 2016
Produk - 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

Lihat juga

Enumerasi Inti Server Web
Enumerasi REQUEST_NOTIFICATION_STATUS