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.
Menentukan kelas dasar untuk modul HTTP tingkat permintaan.
Sintaks
class CHttpModule
Metode
Tabel berikut mencantumkan metode yang diekspos oleh CHttpModule kelas .
| Nama | Deskripsi |
|---|---|
| ~CHttpModule | Membatalkan alokasi instans CHttpModule kelas. |
| CHttpModule | Menginisialisasi instans baru kelas CHttpModule. |
| Dispose | Merilis semua sumber daya yang digunakan oleh instans CHttpModule kelas saat ini. |
| OnAcquireRequestState | Mewakili metode yang akan menangani AcquireRequestState peristiwa, yang terjadi ketika IIS mengambil status untuk permintaan saat ini. |
| OnAsyncCompletion | Mewakili metode yang akan menangani peristiwa penyelesaian asinkron, yang terjadi setelah operasi asinkron selesai diproses. |
| OnAuthenticateRequest | Mewakili metode yang akan menangani AuthenticateRequest peristiwa, yang terjadi ketika IIS menetapkan identitas pengguna. |
| OnAuthorizeRequest | Mewakili metode yang akan menangani AuthorizeRequest peristiwa, yang terjadi ketika IIS memverifikasi otorisasi pengguna. |
| OnBeginRequest | Mewakili metode yang akan menangani BeginRequest peristiwa, yang terjadi sebagai peristiwa pertama dalam alur pemrosesan permintaan terintegrasi HTTP untuk permintaan saat ini. |
| OnCustomRequestNotification | Mewakili metode yang akan menangani peristiwa kustom, yang terjadi saat modul menaikkan pemberitahuan yang ditentukan pengguna. |
| OnEndRequest | Mewakili metode yang akan menangani EndRequest peristiwa, yang terjadi sebagai peristiwa terakhir dalam alur pemrosesan permintaan terintegrasi HTTP untuk permintaan saat ini. |
| OnExecuteRequestHandler | Mewakili metode yang akan menangani ExecuteRequestHandler peristiwa, yang terjadi ketika IIS menjalankan handler untuk permintaan saat ini. |
| OnLogRequest | Mewakili metode yang akan menangani LogRequest peristiwa, yang terjadi ketika IIS bersiap untuk mencatat permintaan saat ini. |
| OnMapPath | Mewakili metode yang akan menangani MapPath peristiwa, yang terjadi ketika operasi meminta jalur fisik untuk dipetakan untuk permintaan saat ini. |
| OnMapRequestHandler | Mewakili metode yang akan menangani MapRequestHandler peristiwa, yang terjadi ketika IIS memetakan permintaan saat ini ke penanganan aktivitas. |
| OnPostAcquireRequestState | Mewakili metode yang akan menangani AcquireRequestState pasca-peristiwa, yang terjadi setelah IIS mengambil status untuk permintaan saat ini. |
| OnPostAuthenticateRequest | Mewakili metode yang akan menangani AuthenticateRequest pasca-peristiwa, yang terjadi setelah IIS menetapkan identitas pengguna. |
| OnPostAuthorizeRequest | Mewakili metode yang akan menangani AuthorizeRequest pasca-peristiwa, yang terjadi setelah IIS telah memverifikasi otorisasi pengguna. |
| OnPostBeginRequest | Mewakili metode yang akan menangani BeginRequest pasca-peristiwa, yang terjadi setelah peristiwa pertama dalam alur pemrosesan permintaan terintegrasi HTTP. |
| OnPostEndRequest | Mewakili metode yang akan menangani EndRequest pasca-peristiwa, yang terjadi setelah peristiwa terakhir dalam alur pemrosesan permintaan terintegrasi HTTP untuk permintaan saat ini. |
| OnPostExecuteRequestHandler | Mewakili metode yang akan menangani ExecuteRequestHandler pasca-peristiwa, yang terjadi setelah IIS menjalankan handler untuk permintaan saat ini. |
| OnPostLogRequest | Mewakili metode yang akan menangani LogRequest pasca-peristiwa, yang terjadi setelah IIS mencatat permintaan saat ini. |
| OnPostMapRequestHandler | Mewakili metode yang akan menangani MapRequestHandler pasca-peristiwa, yang terjadi setelah IIS memetakan permintaan saat ini ke penanganan aktivitas yang sesuai. |
| OnPostPreExecuteRequestHandler | Mewakili metode yang akan menangani PreExecuteRequestHandler pasca-peristiwa, yang terjadi sebelum IIS menjalankan handler permintaan. |
| OnPostReleaseRequestState | Mewakili metode yang akan menangani ReleaseRequestState pasca-peristiwa, yang terjadi setelah status saat ini dirilis. |
| OnPostResolveRequestCache | Mewakili metode yang akan menangani ResolveRequestCache pasca-peristiwa, yang terjadi setelah IIS menyelesaikan permintaan dari cache. |
| OnPostUpdateRequestCache | Mewakili metode yang akan menangani UpdateRequestCache pasca-peristiwa, yang terjadi setelah IIS menyimpan permintaan di cache. |
| OnPreExecuteRequestHandler | Mewakili metode yang akan menangani PreExecuteRequestHandler peristiwa, yang terjadi sebelum IIS menjalankan handler permintaan. |
| OnReadEntity | Mewakili metode yang akan menangani ReadEntity peristiwa, yang terjadi ketika operasi membaca data dari buffer permintaan. |
| OnReleaseRequestState | Mewakili metode yang akan menangani ReleaseRequestState peristiwa, yang terjadi ketika status saat ini dirilis. |
| OnResolveRequestCache | Mewakili metode yang akan menangani ResolveRequestCache peristiwa, yang terjadi ketika IIS menyelesaikan permintaan dalam cache. |
| OnSendResponse | Mewakili metode yang akan menangani SendResponse peristiwa, yang terjadi ketika IIS mengirim buffer respons. |
| OnUpdateRequestCache | Mewakili metode yang akan menangani UpdateRequestCache peristiwa, yang terjadi ketika IIS menyimpan permintaan dalam cache. |
Kelas Turunan
Kelas ini tidak berisi kelas turunan.
Keterangan
Kelas CHttpModule adalah kelas dasar untuk modul HTTP tingkat permintaan. Untuk membuat CHttpModulekelas -turunan, Anda perlu membuat modul HTTP tingkat permintaan yang berisi kelas yang mewarisi dari CHttpModule dan kelas yang berasal dari antarmuka IHttpModuleFactory . Untuk informasi selengkapnya tentang membuat modul HTTP, lihat Merancang modul HTTP Native-Code.
Kelas ini CHttpModule menyediakan metode konstruktor dan destruktor yang dilindungi dan metode publik Dispose . Pada akhir permintaan, Dispose metode dipanggil untuk menghapus instans CHttpModulekelas -turunan.
Kelas ini CHttpModule juga menentukan metode khusus pemberitahuan yang dipanggil IIS 7 saat memproses peristiwa tingkat permintaan dalam alur pemrosesan permintaan terintegrasi. Modul HTTP dapat mendaftar untuk peristiwa tertentu dengan menentukan daftar pemberitahuan dalam fungsi RegisterModule modul yang diekspor.
Peristiwa permintaan deterministik
Sebagian besar metode pemberitahuan tingkat permintaan diproses secara kronologis selama alur normal peristiwa tingkat permintaan dalam alur terintegrasi. Setiap metode pemberitahuan tingkat permintaan deterministik memiliki pemberitahuan pasca-peristiwa yang cocok, yang memungkinkan modul HTTP untuk memproses ketika suatu peristiwa terjadi atau segera setelah peristiwa terjadi.
Tabel berikut mencantumkan peristiwa tingkat permintaan kronologis dan metode pemberitahuan pasca-peristiwa dalam urutan kemunculannya dalam alur terintegrasi.
| Metode pemberitahuan peristiwa | Metode pemberitahuan pasca-peristiwa |
|---|---|
OnBeginRequest |
OnPostBeginRequest |
OnAuthenticateRequest |
OnPostAuthenticateRequest |
OnAuthorizeRequest |
OnPostAuthorizeRequest |
OnResolveRequestCache |
OnPostResolveRequestCache |
OnMapRequestHandler |
OnPostMapRequestHandler |
OnAcquireRequestState |
OnPostAcquireRequestState |
OnPreExecuteRequestHandler |
OnPostPreExecuteRequestHandler |
OnExecuteRequestHandler |
OnPostExecuteRequestHandler |
OnReleaseRequestState |
OnPostReleaseRequestState |
OnUpdateRequestCache |
OnPostUpdateRequestCache |
OnLogRequest |
OnPostLogRequest |
OnEndRequest |
OnPostEndRequest |
Misalnya, OnBeginRequest terjadi sebelum OnAuthenticateRequest, OnMapRequestHandler terjadi sebelum OnAcquireRequestState, dan sebagainya.
Catatan
Pemberitahuan pasca-peristiwa terjadi sebelum pemberitahuan tingkat permintaan kronologis berikutnya. Misalnya, OnPostAuthenticateRequest terjadi sebelum OnAuthorizeRequest, OnPostUpdateRequestCache terjadi sebelum OnLogRequest, dan sebagainya.
Peristiwa permintaan nondeterministik
Metode pemberitahuan tingkat permintaan yang tersisa tidak diproses dalam urutan tertentu; sebaliknya, IIS memproses peristiwa ini ketika peristiwa nondeterministik tertentu terjadi. Tabel berikut mencantumkan peristiwa tingkat permintaan nondeterministik dan metode pemberitahuan pasca-peristiwa terkait.
| Metode pemberitahuan peristiwa | Metode pemberitahuan pasca-peristiwa |
|---|---|
OnAsyncCompletion |
(Tidak ada) 1 |
OnCustomRequestNotification |
(Tidak Ada) 2 |
OnMapPath |
(Tidak Ada) |
OnReadEntity |
(Tidak Ada) |
OnSendResponse |
(Tidak Ada) |
1 Metode OnAsyncCompletion ini dipanggil ketika peristiwa asinkron terjadi dalam modul HTTP. Dengan demikian, Anda tidak dapat mendaftar untuk pemberitahuan asinkron dengan menggunakan fungsi RegisterModule modul yang diekspor. Sebagai gantinya, modul Anda akan menyediakan OnAsyncCompletion metode untuk memproses pemberitahuan yang terjadi setelah memanggil metode yang kembali secara asinkron (misalnya, metode IHttpContext::ExecuteRequest dan IHttpResponse::WriteEntityChunks ). Ketika IIS memanggil OnAsyncCompletion, metode akan meneruskan parameter yang menunjukkan jenis pemberitahuan dan apakah pemberitahuan tersebut untuk peristiwa atau pasca-peristiwa.
2 Metode OnCustomRequestNotification ini tidak memiliki metode pemberitahuan pasca-peristiwa yang sesuai. Modul HTTP dapat mendaftar untuk pemberitahuan kustom dengan menggunakan fungsi modul yang diekspor RegisterModule , tetapi modul tidak dapat mendaftar untuk pemberitahuan yang terjadi setelah pemberitahuan kustom terjadi.
Contoh
Contoh berikut menunjukkan cara membuat modul HTTP "Halo Dunia" sederhana. Modul menentukan fungsi yang diekspor yang meneruskan RegisterModule instans IHttpModuleFactory antarmuka ke metode IHttpModuleRegistrationInfo::SetRequestNotifications dan mendaftar untuk pemberitahuan RQ_BEGIN_REQUEST . IIS menggunakan metode IHttpModuleFactory::GetHttpModule untuk membuat contoh CHttpModule kelas dan mengembalikan status keberhasilan. IIS juga menggunakan metode IHttpModuleFactory::Terminate untuk menghapus pabrik dari memori.
Ketika pemberitahuan RQ_BEGIN_REQUEST terjadi, IIS memanggil metode modul OnBeginRequest untuk memproses permintaan saat ini. OnBeginRequest menghapus buffer respons dan memodifikasi jenis MIME untuk respons. Metode ini kemudian membuat gugus data yang berisi string "Halo Dunia" dan mengembalikan string ke klien Web. Terakhir, modul mengembalikan indikator status yang memberi tahu IIS bahwa semua pemberitahuan selesai lalu keluar.
#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>
// Create the module class.
class CHelloWorld : public CHttpModule
{
public:
REQUEST_NOTIFICATION_STATUS
OnBeginRequest(
IN IHttpContext * pHttpContext,
IN IHttpEventProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Create an HRESULT to receive return values from methods.
HRESULT hr;
// Retrieve a pointer to the response.
IHttpResponse * pHttpResponse = pHttpContext->GetResponse();
// Test for an error.
if (pHttpResponse != NULL)
{
// Clear the existing response.
pHttpResponse->Clear();
// Set the MIME type to plain text.
pHttpResponse->SetHeader(
HttpHeaderContentType,"text/plain",
(USHORT)strlen("text/plain"),TRUE);
// Create a string with the response.
PCSTR pszBuffer = "Hello World!";
// Create a data chunk.
HTTP_DATA_CHUNK dataChunk;
// Set the chunk to a chunk in memory.
dataChunk.DataChunkType = HttpDataChunkFromMemory;
// Buffer for bytes written of data chunk.
DWORD cbSent;
// Set the chunk to the buffer.
dataChunk.FromMemory.pBuffer =
(PVOID) pszBuffer;
// Set the chunk size to the buffer size.
dataChunk.FromMemory.BufferLength =
(USHORT) strlen(pszBuffer);
// Insert the data chunk into the response.
hr = pHttpResponse->WriteEntityChunks(
&dataChunk,1,FALSE,TRUE,&cbSent);
// Test for an error.
if (FAILED(hr))
{
// Set the HTTP status.
pHttpResponse->SetStatus(500,"Server Error",0,hr);
}
// End additional processing.
return RQ_NOTIFICATION_FINISH_REQUEST;
}
// Return processing to the pipeline.
return RQ_NOTIFICATION_CONTINUE;
}
};
// Create the module's class factory.
class CHelloWorldFactory : public IHttpModuleFactory
{
public:
HRESULT
GetHttpModule(
OUT CHttpModule ** ppModule,
IN IModuleAllocator * pAllocator
)
{
UNREFERENCED_PARAMETER( pAllocator );
// Create a new instance.
CHelloWorld * pModule = new CHelloWorld;
// 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;
}
};
// Create the module's exported registration function.
HRESULT
__stdcall
RegisterModule(
DWORD dwServerVersion,
IHttpModuleRegistrationInfo * pModuleInfo,
IHttpServer * pGlobalInfo
)
{
UNREFERENCED_PARAMETER( dwServerVersion );
UNREFERENCED_PARAMETER( pGlobalInfo );
// Set the request notifications and exit.
return pModuleInfo->SetRequestNotifications(
new CHelloWorldFactory,
RQ_BEGIN_REQUEST,
0
);
}
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 |