Bagikan melalui


Merancang Modul HTTP Native-Code

Modul HTTP di IIS 7 memungkinkan pengembang untuk memperluas atau mengganti fungsionalitas IIS inti. Misalnya, Anda dapat menulis modul autentikasi hash yang menggantikan modul yang disertakan dengan IIS 7. Meskipun beberapa fungsionalitas yang disediakan oleh modul kode asli mungkin menyerupai fungsionalitas yang sebelumnya tersedia dengan filter ISAPI, modul kode asli dirancang secara berbeda dan menyediakan set fitur yang jauh lebih kaya daripada filter ISAPI.

Persyaratan untuk Modul HTTP Native-Code

Menambahkan Fungsi Pendaftaran yang Diekspor

Modul HTTP diperlukan untuk mengekspor fungsi RegisterModule . Anda dapat mengekspor fungsi ini dengan membuat file definisi modul (.def) untuk proyek Anda, atau Anda dapat mengkompilasi modul dengan menggunakan sakelar /EXPORT:RegisterModule .

Menentukan Pemberitahuan dan Prioritas Modul

Saat membuat RegisterModule fungsi, Anda menentukan bitmask yang berisi daftar pemberitahuan yang akan diproses modul tingkat permintaan Anda (untuk informasi selengkapnya, lihat Konstanta Pemrosesan Permintaan). Misalnya, modul tingkat permintaan dapat menentukan bahwa modul akan menyediakan metode untuk memproses pemberitahuan RQ_BEGIN_REQUEST dan RQ_MAP_PATH pasca-pemberitahuan. Demikian pula, modul tingkat global dapat menentukan bahwa modul tersebut akan menyediakan metode untuk memproses GL_APPLICATION_START dan pemberitahuan GL_APPLICATION_STOP .

Fungsi ini RegisterModule juga memungkinkan Anda menentukan prioritas untuk modul. Prioritas yang tersedia adalah PRIORITY_ALIAS_FIRST, , PRIORITY_ALIAS_HIGHPRIORITY_ALIAS_MEDIUM, PRIORITY_ALIAS_LOW, dan PRIORITY_ALIAS_LAST. Ketika modul terdaftar, modul diproses dalam urutan pengaturan prioritas dan konfigurasi. Misalnya, jika Anda membuat modul HTTP yang mendaftar sebagai modul prioritas sedang, modul Anda tidak akan diproses sampai semua modul berprioritas tinggi telah diproses. Anda dapat mengonfigurasi modul untuk diproses sebelum modul berprioritas sedang lainnya, dan modul Anda akan diproses sebelum modul berprioritas rendah.

Catatan

Urutan tingkat prioritas dibalik untuk RQ_SEND_RESPONSE pemberitahuan.

Membuat Modul Request-Level

Membuat Pabrik Modul

Modul tingkat permintaan kode asli harus menyediakan pabrik modul yang membuat instans kelas CHttpModule . Pabrik modul akan mewarisi dari antarmuka IHttpModuleFactory .

Untuk informasi selengkapnya tentang cara membuat pabrik modul, lihat contoh kode di Panduan: Membuat Modul HTTP Request-Level Dengan Menggunakan Kode Asli.

Membuat Kelas yang Berasal dari CHttpModule

Fungsionalitas pemrosesan utama untuk modul HTTP tingkat permintaan disediakan melalui modul yang berasal dari kelas dasar CHttpModule . Kelas ini harus berisi metode panggilan balik untuk setiap pemberitahuan atau pasca-pemberitahuan yang tercantum dalam RegisterModule fungsi. Misalnya, jika modul Anda terdaftar untuk pemberitahuan RQ_AUTHENTICATE_REQUEST dan RQ_AUTHORIZE_REQUEST pasca-pemberitahuan, kelas Anda harus berisi metode OnAuthenticateRequest dan OnPostAuthorizeRequest .

Mengembalikan dari Metode CHttpModule

Ketika metode di CHttpModule kelas telah selesai diproses, setiap metode harus mengembalikan nilai enumerasi REQUEST_NOTIFICATION_STATUS . Nilai ini menentukan bagaimana IIS akan menangani kondisi keluar dari metode kelas. Misalnya, nilai pengembalian RQ_NOTIFICATION_CONTINUE menginformasikan IIS untuk terus memproses permintaan. Sebaliknya, nilai pengembalian RQ_NOTIFICATION_FINISH_REQUEST menginstruksikan IIS untuk menghentikan pemrosesan pada permintaan saat ini.

Pembersihan CHttpModule

Setelah modul selesai diproses, IIS akan memanggil metode CHttpModule::D ispose modul untuk menghapus CHttpModule kelas dari memori.

Membuat Modul Global-Level

Membuat Kelas yang Berasal dari CGlobalModule

Fungsionalitas pemrosesan utama untuk modul HTTP tingkat global disediakan melalui modul yang berasal dari kelas CGlobalModule dasar. Kelas ini harus berisi metode panggilan balik untuk setiap pemberitahuan yang tercantum dalam RegisterModule fungsi . Misalnya, jika modul Anda terdaftar untuk GL_APPLICATION_START dan pemberitahuan GL_APPLICATION_STOP , kelas Anda harus berisi metode OnGlobalApplicationStart dan OnGlobalApplicationStop .

Mengembalikan dari Metode CGlobalModule

Ketika metode di CGlobalModule kelas telah selesai diproses, setiap metode harus mengembalikan nilai enumerasi GLOBAL_NOTIFICATION_STATUS . Nilai ini menentukan bagaimana IIS akan menangani kondisi keluar dari metode kelas. Misalnya, nilai pengembalian GL_NOTIFICATION_CONTINUE menginformasikan IIS untuk terus memproses pemberitahuan. Sebaliknya, nilai pengembalian GL_NOTIFICATION_HANDLED menginstruksikan IIS untuk berhenti memproses pada pemberitahuan saat ini.

Pembersihan CGlobalModule

Setelah modul selesai diproses, IIS akan memanggil metode CGlobalModule::Terminate modul. Modul Anda harus menggunakan metode ini untuk menghapus kelas Anda CGlobalModule dari memori.

Lihat juga

Panduan: Membuat Modul HTTP Request-Level Dengan Menggunakan Kode Asli
Panduan: Membuat Modul HTTP Global-Level Dengan Menggunakan Kode Asli
Membuat Modul HTTP Native-Code