Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mendaftarkan pemberitahuan tingkat permintaan untuk modul.
Sintaks
virtual HRESULT SetRequestNotifications(
IN IHttpModuleFactory* pModuleFactory,
IN DWORD dwRequestNotifications,
IN DWORD dwPostRequestNotifications
) = 0;
Parameter
pModuleFactory
[IN] Penunjuk ke antarmuka IHttpModuleFactory .
dwRequestNotifications
[IN] Nilai bitmask yang berisi pemberitahuan permintaan untuk didaftarkan. (Ditentukan dalam Httpserv.h.)
dwPostRequestNotifications
[IN] Nilai bitmask yang berisi pemberitahuan pasca-peristiwa untuk mendaftar. (Ditentukan dalam Httpserv.h.)
Tampilkan Nilai
Sebuah HRESULT. Nilai yang mungkin termasuk, tetapi tidak terbatas pada, yang ada dalam tabel berikut.
| Nilai | Deskripsi |
|---|---|
| S_OK | Menunjukkan bahwa operasi berhasil. |
| ERROR_ALREADY_EXISTS | Menunjukkan bahwa modul telah terdaftar. |
Keterangan
Metode ini SetRequestNotifications mendaftarkan pemberitahuan tingkat permintaan untuk kelas CHttpModule . Modul dapat mendaftar untuk dua peristiwa untuk setiap pemberitahuan: pemberitahuan peristiwa, seperti yang ditunjukkan oleh bitmask dalam dwRequestNotifications parameter, dan pemberitahuan pasca-peristiwa, seperti yang ditunjukkan oleh bitmask dalam dwPostRequestNotifications parameter .
Misalnya, modul HTTP dapat mendaftar untuk pemberitahuan RQ_AUTHENTICATE_REQUEST dan pemberitahuan pasca-peristiwa untuk pemberitahuan yang sama. Dengan demikian, modul dapat menyediakan fungsionalitas pemrosesan tambahan untuk pemberitahuan peristiwa dan membersihkan detail pemrosesan apa pun di pemberitahuan pasca-peristiwa.
Catatan
Beberapa peristiwa tidak memiliki pemberitahuan pasca-peristiwa. Gunakan 0 untuk dwPostRequestNotifications parameter saat Anda tidak menginginkan pemberitahuan atau saat pemberitahuan pasca-peristiwa tidak didukung.
Catatan
Nilai bitmask untuk pemberitahuan tingkat permintaan ditentukan dalam file Httpserv.h.
Metode ini SetRequestNotifications memerlukan penunjuk ke antarmuka IHttpModuleFactory , yang akan digunakan IIS untuk membuat instans CHttpModule kelas. Pabrik ini harus menangani pembuatan instans CHttpModule kelas dan mengembalikan pesan kesalahan jika kelas tidak dapat dibuat.
Contoh
Contoh berikut menunjukkan cara membuat modul HTTP yang menggunakan fungsi RegisterModule dan metode berikut untuk mendaftarkan modul untuk pemberitahuan tingkat global dan tingkat permintaan.
Metode
SetRequestNotificationsmendaftarkanCHttpModulekelas untuk pemberitahuan OnBeginRequest tingkat permintaan.Metode SetPriorityForRequestNotification menetapkan prioritas modul untuk pemberitahuan tingkat permintaan.
Metode SetGlobalNotifications mendaftarkan kelas CGlobalModule untuk pemberitahuan OnGlobalPreBeginRequest tingkat global.
Metode SetPriorityForGlobalNotification menetapkan prioritas modul untuk pemberitahuan tingkat global.
Modul menanggapi pemberitahuan terdaftar dan menulis entri ke log aplikasi di Pemampil Peristiwa.
Catatan
Entri dalam Pemampil Peristiwa akan menampilkan "IISADMIN" sebagai sumber peristiwa.
#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>
// Create a global handle for the Event Viewer.
HANDLE g_hEventLog;
// Define the method that writes to the Event Viewer.
BOOL WriteEventViewerLog(LPCSTR szBuffer[], WORD wNumStrings);
// Create the HTTP module class.
class MyHttpModule : public CHttpModule
{
public:
REQUEST_NOTIFICATION_STATUS
OnBeginRequest(
IN IHttpContext * pHttpContext,
IN IHttpEventProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pHttpContext );
UNREFERENCED_PARAMETER( pProvider );
// Create an array of strings.
LPCSTR szBuffer[2] = {"MyHttpModule","OnBeginRequest"};
// Write the strings to the Event Viewer.
WriteEventViewerLog(szBuffer,2);
// Return processing to the pipeline.
return RQ_NOTIFICATION_CONTINUE;
}
};
// Create the module's global class.
class MyGlobalModule : public CGlobalModule
{
public:
GLOBAL_NOTIFICATION_STATUS
OnGlobalPreBeginRequest(
IN IPreBeginRequestProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Create an array of strings.
LPCSTR szBuffer[2] = {"MyGlobalModule","OnGlobalPreBeginRequest"};
// Write the strings to the Event Viewer.
WriteEventViewerLog(szBuffer,2);
// Return processing to the pipeline.
return GL_NOTIFICATION_CONTINUE;
}
VOID Terminate()
{
// Remove the class from memory.
delete this;
}
MyGlobalModule()
{
// Open a handle to the Event Viewer.
g_hEventLog = RegisterEventSource( NULL,"IISADMIN" );
}
~MyGlobalModule()
{
// Test whether the handle for the Event Viewer is open.
if (NULL != g_hEventLog)
{
DeregisterEventSource( g_hEventLog );
g_hEventLog = NULL;
}
}
};
// Create the module's class factory.
class MyHttpModuleFactory : public IHttpModuleFactory
{
public:
HRESULT
GetHttpModule(
OUT CHttpModule ** ppModule,
IN IModuleAllocator * pAllocator
)
{
UNREFERENCED_PARAMETER( pAllocator );
// Create a new instance.
MyHttpModule * pModule = new MyHttpModule;
// Test for an error.
if (!pModule)
{
// Return an error if the factory cannot create the instance.
return HRESULT_FROM_WIN32( ERROR_NOT_ENOUGH_MEMORY );
}
else
{
// Return a pointer to the module.
*ppModule = pModule;
pModule = NULL;
// Return a success status.
return S_OK;
}
}
void Terminate()
{
// Remove the class from memory.
delete this;
}
};
// Define a method that writes to the Event Viewer.
BOOL WriteEventViewerLog(LPCSTR szBuffer[], WORD wNumStrings)
{
// Test whether the handle for the Event Viewer is open.
if (NULL != g_hEventLog)
{
// Write any strings to the Event Viewer and return.
return ReportEvent(
g_hEventLog,
EVENTLOG_INFORMATION_TYPE,
0, 0, NULL, wNumStrings,
0, szBuffer, 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 HRESULT to receive return values from methods.
HRESULT hr;
// Set the request notifications.
hr = pModuleInfo->SetRequestNotifications(
new MyHttpModuleFactory,
RQ_BEGIN_REQUEST, 0 );
// Test for an error and exit if necessary.
if (FAILED(hr))
{
return hr;
}
// Set the request priority.
hr = pModuleInfo->SetPriorityForRequestNotification(
RQ_BEGIN_REQUEST,PRIORITY_ALIAS_MEDIUM);
// Test for an error and exit if necessary.
if (FAILED(hr))
{
return hr;
}
// 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.
hr = pModuleInfo->SetGlobalNotifications(
pGlobalModule, GL_PRE_BEGIN_REQUEST );
// Test for an error and exit if necessary.
if (FAILED(hr))
{
return hr;
}
// Set the global priority.
hr = pModuleInfo->SetPriorityForGlobalNotification(
GL_PRE_BEGIN_REQUEST,PRIORITY_ALIAS_LOW);
// Test for an error and exit if necessary.
if (FAILED(hr))
{
return hr;
}
// Return a success status;
return S_OK;
}
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 Request-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
Antarmuka IHttpModuleRegistrationInfo
Metode IHttpModuleRegistrationInfo::SetGlobalNotifications
Metode IHttpModuleRegistrationInfo::SetPriorityForGlobalNotification
Metode IHttpModuleRegistrationInfo::SetPriorityForRequestNotification
Fungsi PFN_REGISTERMODULE