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.
Panduan ini menunjukkan cara menggunakan C++ untuk membuat sampel modul HTTP tingkat global yang mengimplementasikan arsitektur pemrosesan permintaan baru di IIS 7. Arsitektur baru ini memperluas kemampuan pemrograman kode asli saat Anda menulis aplikasi IIS melalui versi modul HTTP ASP.NET yang lebih lama dan filter atau ekstensi ISAPI. Untuk informasi selengkapnya tentang mendesain modul HTTP menggunakan arsitektur pemrosesan permintaan baru, lihat Merancang modul HTTP Native-Code.
Dalam panduan ini, Anda akan membuat proyek C++ untuk modul HTTP Anda, menambahkan kode yang diperlukan untuk proyek "Halo Dunia", lalu mengkompilasi dan menguji modul.
Prasyarat
Perangkat lunak berikut diperlukan untuk menyelesaikan langkah-langkah dalam contoh:
IIS 7.
Visual Studio 2005.
Catatan
Anda juga dapat menggunakan Visual Studio .NET 2003 atau yang lebih lama, meskipun langkah-langkah penelusuran mungkin tidak identik.
Membuat Modul
Di bagian panduan ini, Anda akan membuat proyek C++ DLL kosong untuk modul HTTP Anda.
Untuk membuat proyek C++ DLL baru
Mulai Visual Studio 2005.
Verifikasi bahwa opsi global memiliki semua jalur yang tepat ke SDK termasuk file:
Di menu Alat, klik Opsi.
Perluas simpul Proyek dan Solusi dalam tampilan pohon, lalu klik Direktori VC++.
Dalam kotak drop-down Perlihatkan direktori untuk , pilih Sertakan file.
Verifikasi bahwa jalur tempat Anda menginstal file sertakan SDK tercantum. Jika jalur tidak tercantum, klik ikon Baris Baru , lalu tambahkan jalur tempat Anda menginstal SDK menyertakan file.
Klik OK.
Buat proyek C++ baru:
Pada menu File, arahkan ke Baru, lalu klik Proyek.
Kotak dialog Proyek Baru terbuka.
Di panel Jenis Proyek , perluas simpul Visual C++ , lalu klik Win32.
Di panel Templat , pilih Proyek Win32.
Dalam kotak Nama , ketik HelloWorld.
Dalam kotak Lokasi , ketik jalur untuk sampel.
Klik OK.
Panduan Aplikasi Win32 terbuka.
Klik Pengaturan Aplikasi.
Di bawah Jenis aplikasi, klik DLL.
Di bawah Opsi tambahan, klik Kosongkan proyek.
Klik Selesai.
Menambahkan Kode dan File Sumber
Langkah selanjutnya adalah menambahkan C++ dan file definisi modul yang diperlukan ke proyek.
Untuk menambahkan file sumber ke proyek
Buat file definisi modul untuk mengekspor fungsi RegisterModule :
Di Penjelajah Solusi, klik kanan File Sumber, arahkan ke Tambahkan, lalu klik Item Baru.
Kotak dialog Tambahkan Item Baru terbuka.
Perluas simpul Visual C++ di panel Kategori , lalu klik Kode.
Di panel Templat , pilih templat File Definisi Modul .
Dalam kotak Nama , ketik HelloWorld, dan biarkan jalur default untuk file di kotak Lokasi .
Klik Tambahkan.
Tambahkan kode berikut:
LIBRARY HelloWorld EXPORTS RegisterModule
Anda dapat secara opsional mengekspor fungsi RegisterModule dengan menggunakan sakelar /EXPORT:RegisterModule :
Pada menu Proyek , klik HelloWorld Properties.
Perluas simpul Properti Konfigurasi dalam tampilan pohon, perluas simpul Linker , lalu klik Baris Perintah.
Di kotak drop-down Konfigurasi , pilih Semua Konfigurasi.
Dalam kotak Opsi Tambahan , ketik /EXPORT:RegisterModule.
Klik OK.
Buat file C++:
Di Penjelajah Solusi, klik kanan File Sumber, arahkan ke Tambahkan, lalu klik Item Baru.
Kotak dialog Tambahkan Item Baru terbuka.
Perluas simpul Visual C++ di panel Kategori , lalu klik Kode.
Di panel Templat , pilih templat File C++ .
Dalam kotak Nama , ketik HelloWorld, dan biarkan jalur default untuk file di kotak Lokasi .
Klik Tambahkan.
Tambahkan kode berikut:
#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 ); }
Anda dapat secara opsional mengkompilasi kode dengan menggunakan
__stdcall (/Gz)konvensi panggilan:Pada menu Proyek , klik HelloWorld Properties.
Perluas simpul Properti Konfigurasi dalam tampilan pohon, perluas simpul C/C++ , lalu klik Tingkat Lanjut.
Di kotak drop-down Konfigurasi , pilih Semua Konfigurasi.
Dalam kotak drop-down Konvensi Panggilan , pilih __stdcall (/Gz).
Klik OK.
Mengkompilasi dan Menguji Modul
Modul HTTP Anda memiliki semua yang dibutuhkan. Yang diperlukan hanyalah mengkompilasi dan menguji modul HTTP Anda.
Untuk mengkompilasi dan menguji proyek
Kompilasi modul HTTP:
Pada menu Build, klik Solusi Build.
Verifikasi bahwa Visual Studio tidak mengembalikan kesalahan atau peringatan apa pun. Jika Anda mengalami kesalahan atau peringatan, Anda harus menyelesaikan masalah tersebut sebelum menguji proyek.
Salin file DLL untuk modul HTTP ke folder IIS Anda:
Buka Windows Explorer dan temukan folder default yang ditentukan saat Anda membuat proyek C++.
Bergantung pada opsi build, Anda akan melihat folder bernama Debug atau Rilis di folder default untuk proyek Anda.
Di dalam folder Debug atau Rilis, temukan file bernama HelloWorld.dll.
Salin file HelloWorld.dll ke folder Inetsrv Anda, yang terletak secara default di %WinDir%\System32\Inetsrv.
Tambahkan modul HelloWorld.dll ke daftar modul Anda (untuk instruksi, lihat Merancang modul HTTP Native-Code).
Gunakan Internet Explorer untuk menelusuri situs Web Anda; Anda akan melihat isi situs Web normal Anda.
Buka Windows Event Viewer dan beralihlah ke log aplikasi global; Anda akan melihat entri yang mencantumkan "IISADMIN" sebagai sumber kejadian.
Klik kanan peristiwa, lalu klik Properti untuk melihat detail peristiwa. Anda akan melihat pesan "Halo Dunia!" ditampilkan di panel Deskripsi.
Pemecahan Masalah Pengaturan Anda
Jika modul Anda tidak dikompilasi atau tidak berfungsi seperti yang diharapkan, berikut adalah beberapa area yang dapat Anda periksa:
Pastikan Anda telah menentukan
__stdcalluntuk fungsi yang diekspor, atau Anda telah mengonfigurasi kompilasi dengan menggunakan__stdcall (/Gz)konvensi panggilan.Pastikan Anda telah menambahkan ekspor yang benar
RegisterModuleke file definisi Anda.Pastikan Anda telah menambahkan file definisi ke pengaturan proyek. Untuk menambahkan file ke pengaturan proyek, selesaikan langkah-langkah berikut:
Pada menu Proyek, klik Properti.
Perluas simpul Properti Konfigurasi dalam tampilan pohon, perluas simpul Linker , lalu klik Input.
Untuk pengaturan File Definisi Modul , pastikan file definisi Anda tercantum.