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 membuat aplikasi konsol Windows yang menggunakan fitur Hosted Web Core yang tersedia di IIS 7.
Fungsionalitas Hosted Web Core di IIS 7 memungkinkan Anda membuat aplikasi yang memuat instans inti IIS, yang merupakan aplikasi Web dasar dan fungsionalitas penyajian konten yang disediakan oleh IIS. Untuk informasi selengkapnya tentang Hosted Web Core, lihat Referensi API Web Core yang Dihosting.
Anda harus menyediakan file konfigurasi untuk aplikasi Anda yang mengikuti format file ApplicationHost.config. Namun, Anda tidak boleh menggunakan file ApplicationHost.config aktual Anda, karena mungkin berisi pengaturan yang berkonflik dengan pengaturan situs Web Anda. Untuk informasi selengkapnya tentang cara membuat file konfigurasi untuk aplikasi Anda, lihat Panduan: Membuat File Konfigurasi untuk Hosted Web Core.
Tugas yang diilustrasikan dalam panduan ini meliputi yang berikut ini:
Membuat proyek C++ untuk aplikasi Anda.
Menambahkan kode C++ untuk aplikasi Anda.
Mengkompilasi dan menguji aplikasi Anda.
Memecahkan masalah kesalahan saat Anda menggunakan aplikasi Anda.
Prasyarat
Perangkat lunak berikut diperlukan untuk menyelesaikan langkah-langkah dalam contoh:
- IIS 7.
Catatan
Meskipun Anda harus menjalankan aplikasi Hosted Web Core Anda di komputer yang telah menginstal IIS 7, Anda tidak perlu mengkompilasi aplikasi contoh di komputer yang telah menginstal IIS 7. Anda dapat mengkompilasi aplikasi Anda pada versi Windows yang berbeda dan kemudian menyalin aplikasi Anda ke komputer yang telah menginstal 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 Aplikasi Web Core yang Dihosting
Di bagian panduan ini, Anda akan membuat proyek aplikasi konsol C++ untuk aplikasi Anda.
Untuk membuat proyek C++ untuk aplikasi Anda
Mulai Visual Studio 2005.
Verifikasi bahwa opsi global memiliki semua jalur yang benar ke SDK termasuk file:
Di menu Alat, klik Opsi.
Kotak dialog Opsi akan terbuka.
Perluas simpul Proyek dan Solusi dalam tampilan pohon, lalu klik Direktori VC++.
Dalam kotak 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 , klik Proyek Win32.
Dalam kotak Nama , ketik HostedWebTest.
Dalam kotak Lokasi , ketik jalur untuk proyek.
Klik OK.
Panduan Aplikasi Win32 terbuka.
Klik Pengaturan Aplikasi.
Di bawah Jenis aplikasi, klik Aplikasi Konsol.
Klik Selesai.
Visual Studio membuka proyek HostWebTest.cpp.
Konfigurasikan proyek untuk dikompilasi dengan menggunakan
__stdcall (/Gz)
konvensi panggilan:Pada menu Proyek , klik HostedWebTest Properties.
Perluas simpul Properti Konfigurasi dalam tampilan pohon, perluas simpul C/C++ , lalu klik Tingkat Lanjut.
Dalam kotak Konfigurasi , pilih Semua Konfigurasi
Dalam kotak Konvensi Panggilan , pilih __stdcall (/Gz).
Klik OK.
Menambahkan Kode untuk Aplikasi
Bagian ini memperlihatkan cara mengganti kode yang secara otomatis ditambahkan ke file C++ Anda dengan kode yang akan menjalankan Hosted Web Core.
Catatan
Contoh ini mencari file bernama HostedWebTest.config di folder Inetsrv Anda. Anda dapat mengubah jalur dan nama file, tetapi Anda harus menyediakan file konfigurasi yang valid. Untuk informasi selengkapnya tentang cara membuat file konfigurasi untuk aplikasi Anda, lihat Panduan: Membuat File Konfigurasi untuk Hosted Web Core.
Untuk menambahkan kode C++ untuk aplikasi Anda
Buka file HostedWebTest.cpp, jika belum dibuka, lalu hapus semua kode C++ yang ada.
Salin kode C++ berikut ke dalam file:
#include "stdafx.h" #include <windows.h> #include <stdio.h> #include <conio.h> #include <hwebcore.h> // NOTE: Set the project's calling convention to "__stdcall (/Gz)". HRESULT _cdecl _tmain(int argc, _TCHAR* argv[]) { // Create a handle for the Web core DLL. HINSTANCE hDLL; // Specify the HRESULT for returning errors. HRESULT hr = S_OK; // Create arrays to hold paths. WCHAR wszInetPath[MAX_PATH]; WCHAR wszDllPath[MAX_PATH]; WCHAR wszCfgPath[MAX_PATH]; // Retrieve the path of the Inetsrv folder. DWORD nSize = ::ExpandEnvironmentStringsW( L"%windir%\\system32\\inetsrv",wszInetPath,MAX_PATH); // Exit if the path of the Inetsrv folder cannot be determined. if (nSize == 0) { // Retrieve the last error. hr = HRESULT_FROM_WIN32(GetLastError()); // Return an error status to the console. printf("Could not determine the path to the Inetsrv folder.\n"); printf("Error: 0x%x\n",hr); // Return an error from the application and exit. return hr; } // Append the Web core DLL name to the Inetsrv path. wcscpy_s(wszDllPath,MAX_PATH-1,wszInetPath); wcscat_s(wszDllPath,MAX_PATH-1,L"\\"); wcscat_s(wszDllPath,MAX_PATH-1,WEB_CORE_DLL_NAME); // Append the config file name to the Inetsrv path. wcscpy_s(wszCfgPath,MAX_PATH-1,wszInetPath); wcscat_s(wszCfgPath,MAX_PATH-1,L"\\HostedWebTest.config"); // Create a pointer to WebCoreActivate. PFN_WEB_CORE_ACTIVATE pfnWebCoreActivate = NULL; // Create a pointer to WebCoreShutdown. PFN_WEB_CORE_SHUTDOWN pfnWebCoreShutdown = NULL; // Load the Web core DLL. hDLL = ::LoadLibraryW(wszDllPath); // Test whether the Web core DLL was loaded successfully. if (hDLL == NULL) { // Retrieve the last error. hr = HRESULT_FROM_WIN32(GetLastError()); // Return an error status to the console. printf("Could not load DLL.\n"); printf("Error: 0x%x\n",hr); } else { // Return a success status to the console. printf("DLL loaded successfully.\n"); // Retrieve the address for "WebCoreActivate". pfnWebCoreActivate = (PFN_WEB_CORE_ACTIVATE)GetProcAddress( hDLL,"WebCoreActivate"); // Test for an error. if (pfnWebCoreActivate==NULL) { // Retrieve the last error. hr = HRESULT_FROM_WIN32(GetLastError()); // Return an error status to the console. printf("Could not resolve WebCoreActivate.\n"); printf("Error: 0x%x\n",hr); } else { // Return a success status to the console. printf("WebCoreActivate successfully resolved.\n"); // Retrieve the address for "WebCoreShutdown". pfnWebCoreShutdown = (PFN_WEB_CORE_SHUTDOWN)GetProcAddress( hDLL,"WebCoreShutdown"); // Test for an error. if (pfnWebCoreShutdown==NULL) { // Retrieve the last error. hr = HRESULT_FROM_WIN32(GetLastError()); // Return an error status to the console. printf("Could not resolve WebCoreShutdown.\n"); printf("Error: 0x%x\n",hr); } else { // Return a success status to the console. printf("WebCoreShutdown successfully resolved.\n"); // Return an activation status to the console. printf("Activating the Web core...\n"); // Activate the Web core. hr = pfnWebCoreActivate(wszCfgPath,L"",L"TestWebCore"); // Test for an error. if (FAILED(hr)) { // Return an error status to the console. printf("WebCoreActivate failed.\n"); printf("Error: 0x%x\n",hr); } else { // Return a success status to the console. printf("WebCoreActivate was successful.\n"); // Prompt the user to continue. printf("Press any key to continue...\n"); // Wait for a key press. int iKeyPress = _getch(); // Return a shutdown status to the console. printf("Shutting down the Web core...\n"); // Shut down the Web core. hr = pfnWebCoreShutdown(0L); // Test for an error. if (FAILED(hr)) { // Return an error status to the console. printf("WebCoreShutdown failed.\n"); printf("Error: 0x%x\n",hr); } else { // Return a success status to the console. printf("WebCoreShutdown was successful.\n"); } } } } // Release the DLL. FreeLibrary(hDLL); } // Return the application status. return hr; }
Simpan file HostedWebTest.cpp.
Mengkompilasi dan Menguji Aplikasi
Setelah membuat dan menyimpan file C++Anda, langkah selanjutnya adalah mengkompilasi dan menguji aplikasi Anda.
Catatan
Jika Anda tidak mengkompilasi aplikasi Anda di komputer yang telah menginstal IIS 7, Anda harus menyalin file HostedWebTest.exe ke komputer yang telah menginstal IIS 7 sebelum Menguji aplikasi.
Untuk mengkompilasi dan menguji aplikasi Anda
Kompilasi aplikasi:
Pada menu Build, klik Solusi Build.
Verifikasi bahwa Visual Studio tidak mengembalikan kesalahan atau peringatan apa pun. Jika Anda melihat kesalahan atau peringatan, Anda harus menyelesaikan masalah tersebut sebelum menguji proyek.
Buka Windows Explorer dan temukan folder yang Anda tentukan saat 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 HostedWebTest.exe.
Verifikasi bahwa file konfigurasi Anda berada di folder yang sesuai untuk aplikasi Anda. Misalnya, contoh kode yang tercantum sebelumnya dalam panduan ini dirancang untuk menggunakan file bernama HostedWebTest.config yang terletak di folder Inetsrv Anda.
Buka jendela Prompt Perintah dan ubah direktori ke jalur tempat file HostedWebTest.exe Anda berada.
Ketik HostedWebTest dan tekan ENTER untuk memulai aplikasi.
Anda akan melihat output dari aplikasi Anda yang menyerupan berikut:
DLL loaded successfully. WebCoreActivate successfully resolved. WebCoreShutdown successfully resolved. Activating the Web core... WebCoreActivate was successful. Press any key to continue...
Minimalkan jendela Prompt Perintah tanpa menekan tombol apa pun pada keyboard.
Bergantung pada pengaturan konfigurasi, Anda dapat membuka browser Web dan menelusuri situs Web yang ditentukan dalam file konfigurasi Anda.
Setelah Anda selesai menjelajah ke situs Web Anda, kembali ke jendela Prompt Perintah dan tekan BILAH SPASI.
Anda akan melihat output dari aplikasi Anda yang menyerupan berikut:
Shutting down the Web core... WebCoreShutdown was successful.
Pemecahan Masalah Kesalahan
Jika aplikasi Anda tidak dimuat, atau mengembalikan kesalahan saat berjalan, langkah-langkah berikut akan membantu Anda mendiagnosis beberapa kesalahan yang mungkin Anda alami.
Untuk memecahkan masalah kesalahan dalam aplikasi Anda
Jika aplikasi Anda mengembalikan kesalahan berikut:
Could not load DLL. Error: 0x8007007e
Ini adalah status ERROR_MOD_NOT_FOUND. Kesalahan ini menunjukkan bahwa file Hwebcore.dll tidak dapat ditemukan. Kesalahan ini akan terjadi jika IIS tidak diinstal.
Jika aplikasi Anda mengembalikan kesalahan berikut:
DLL loaded successfully. WebCoreActivate successfully resolved. WebCoreShutdown successfully resolved. Activating the Web core... WebCoreActivate failed. Error: 0x8007000d
Ini adalah status ERROR_INVALID_DATA. Kesalahan ini menunjukkan bahwa file konfigurasi Anda tidak dapat ditemukan atau berisi kesalahan. Anda akan melihat di Windows Event Viewer untuk deskripsi kesalahan tambahan.
Jika aplikasi Anda mengembalikan kesalahan berikut:
DLL loaded successfully. WebCoreActivate successfully resolved. WebCoreShutdown successfully resolved. Activating the Web core... WebCoreActivate failed. Error: 0x800700b7
Ini adalah status ERROR_ALREADY_EXISTS. Kesalahan ini menunjukkan bahwa file konfigurasi Anda telah dimuat, tetapi berisi informasi duplikat. Misalnya, Anda mungkin telah menentukan lebih dari satu kumpulan aplikasi, atau Anda mungkin telah membuat pengikatan situs Web duplikat. Anda harus memeriksa Windows Event Viewer untuk deskripsi kesalahan tambahan.
Jika aplikasi Anda berhasil dimuat, tetapi Anda menerima kesalahan HTTP 404 saat menelusuri situs Web yang dihosting oleh aplikasi Anda, Anda harus memeriksa log IIS yang dibuat oleh aplikasi Anda untuk kode substatus 404. Berikut adalah beberapa kode substatus yang mungkin Anda lihat:
404.3 "Ditolak oleh Peta Mime"—Kode substatus ini menunjukkan bahwa jenis MIME untuk sumber daya yang diminta tidak dikonfigurasi dengan benar. Misalnya, Anda akan menemukan kode ini jika Anda menelusuri ke file yang memiliki ekstensi nama file .txt, dan Anda belum menambahkan ekstensi tersebut ke peta MIME dalam file konfigurasi Anda.
404.4 "No Handler"—Kode substatus ini menunjukkan bahwa tidak ada handler yang telah dikonfigurasi untuk sumber daya yang diminta. Misalnya, Anda akan menemukan kode ini jika Anda menelusuri ke file yang memiliki ekstensi nama file .htm, dan Anda belum menambahkan handler file statis ke file konfigurasi Anda.
404.7 "Ekstensi File Ditolak"—Kode substatus ini menunjukkan bahwa ekstensi nama file telah diblokir oleh pemfilteran permintaan. Misalnya, Anda akan menemukan kode ini jika Anda menelusuri ke file yang memiliki ekstensi nama file .gif, dan pemfilteran permintaan telah dikonfigurasi untuk menolak akses ke file yang memiliki ekstensi tersebut.
Masing-masing kesalahan ini menunjukkan masalah dengan pengaturan dalam file konfigurasi aplikasi Anda. Untuk informasi selengkapnya, lihat Panduan: Membuat File Konfigurasi untuk Inti Web yang Dihosting.