Mengembangkan Modul dan Penangan IIS 7.0 dengan .NET Framework

oleh Mike Volodarsky

Gambaran Umum

Artikel ini berfokus pada memulai pengembangan fitur server Web IIS 7.0 ke atas berdasarkan .NET Framework. Artikel ini menunjukkan:

  1. Cara memutuskan apakah akan mengembangkan modul IIS atau handler IIS
  2. Cara menyiapkan lingkungan pengembangan Anda, dengan Visual Studio, Visual C# Express, atau alat baris perintah yang disediakan dengan .NET Framework
  3. Cara membuat proyek pertama Anda
  4. Cara mengembangkan modul dan handler sederhana
  5. Cara menyebarkan modul dan handler sederhana ke server IIS

Untuk melihat beberapa modul dan handler IIS terkelola di dunia nyata, dan mengunduhnya untuk aplikasi Anda, kunjungi Mengalihkan permintaan ke aplikasi Anda dengan modul HttpRedirection, Dapatkan daftar direktori yang terlihat bagus untuk situs web IIS Anda dengan DirectoryListingModule, dan Tampilkan ikon file cantik di aplikasi ASP.NET Anda dengan IconHandler.

Pengantar: Mengembangkan fitur IIS dengan ASP.NET

Rilis IIS sebelum IIS 7.0 menampilkan API C, yang disebut ISAPI, sebagai API ekstensibilitas utama untuk membangun fitur server web. IIS 7.0 ke atas telah direkayasa ulang dari bawah ke atas untuk menyediakan API C++ baru, di mana semua fitur dalam kotak didasarkan, untuk memungkinkan ekstensibilitas runtime lengkap server web.

Selain itu, IIS untuk pertama kalinya juga menyediakan API .NET keakuratan penuh untuk memperluas server web, dengan memanfaatkan integrasi ketat dengan ASP.NET 2.0. Bagi Anda, ini berarti bahwa Anda sekarang dapat memperluas IIS dengan fitur server web baru yang dibangun dengan API ASP.NET 2.0 yang familier. Demikian juga, Anda dapat menggunakan modul dan handler ASP.NET 2.0 yang ada di IIS, memanfaatkan integrasi ASP.NET untuk meningkatkan kekuatan aplikasi Anda tanpa menulis kode baru apa pun. Untuk mempelajari selengkapnya tentang integrasi ASP.NET di IIS, lihat Integrasi ASP.NET dengan IIS 7.

Alat Perdagangan: Memutuskan Lingkungan Pengembangan Anda

Untuk membangun modul dan handler IIS, gunakan lingkungan apa pun yang memungkinkan Anda mengembangkan dan mengkompilasi rakitan .NET. Beberapa opsi umum adalah:

  1. Visual Studio 2005. Atau, Anda juga dapat mengunduh rilis beta terbaru Visual Studio 2008.
  2. Visual C# 2005 Express Edition, unduhan gratis (atau alat Ekspres lainnya, termasuk Visual Basic 2005 Express).
  3. Pengkompilasi baris perintah C# (csc.exe) yang disertakan dalam runtime .NET framework (untuk bahasa lain, Anda harus mengunduh SDK), ditambah editor sumber favorit Anda.

Sampel dalam artikel ini menggunakan C#, meskipun Anda dapat mengembangkan komponen IIS dalam bahasa .NET lain yang didukung (kecuali C++terkelola). Artikel ini menggambarkan cara mengembangkan komponen ekstensibilitas IIS dengan ketiga lingkungan di atas.

Catatan

Karena IIS memanfaatkan API ASP.NET yang ada untuk ekstensibilitas .NET-nya, Anda dapat mengembangkan modul dan handler IIS .NET dengan .NET Framework 2.0 pada Windows XP® dan Windows Server® 2003. Namun, jika Anda berencana untuk menggunakan salah satu dari beberapa API ASP.NET baru yang telah ditambahkan untuk mendukung fitur IIS baru, Anda harus mengembangkan di Windows Vista®, atau mendapatkan versi System.Web.dll dari di Windows Vista atau rilis terbaru .NET Framework 3.5 untuk mengkompilasi kode Anda.

Dua Cara untuk Memperluas IIS: Modul vs. Handler

Semua fitur server web IIS cocok dengan dua kategori: modul, dan handler.

Modul, mirip dengan filter ISAPI di versi IIS sebelumnya, berpartisipasi dalam pemrosesan permintaan setiap permintaan untuk mengubah atau menambahkannya dalam beberapa cara. Contoh beberapa modul dalam kotak di IIS termasuk modul autentikasi, yang memanipulasi status autentikasi permintaan, modul kompresi yang memadatkan respons keluar, dan modul pengelogan yang mencatat informasi tentang permintaan ke log permintaan.

Modul ini adalah kelas .NET yang mengimplementasikan antarmuka System.Web.IHttpModule ASP.NET, dan menggunakan API di namespace System.Web untuk berpartisipasi dalam satu atau beberapa ASP. Tahapan pemrosesan permintaan NET.

Handler, mirip dengan ekstensi ISAPI di versi IIS sebelumnya, bertanggung jawab untuk menangani permintaan dan menghasilkan respons untuk jenis konten tertentu. Perbedaan utama antara modul dan handler adalah bahwa handler biasanya dipetakan ke jalur permintaan atau ekstensi tertentu, dan mendukung pemrosesan sumber daya server tertentu yang sesuai dengan jalur atau ekstensi tersebut. Contoh handler yang disediakan dengan IIS termasuk ASP, yang memproses skrip ASP, handler file statis, yang melayani file statis, dan ASP. PageHandler NET yang memproses halaman ASPX.

Handler adalah kelas .NET yang mengimplementasikan antarmuka System.Web.IHttpHandler atau System.Web.IHttpAsyncHandler ASP.NET, dan menggunakan API di namespace System.Web untuk menghasilkan respons http untuk konten tertentu yang didukungnya.

Saat berencana mengembangkan fitur IIS, pertanyaan pertama yang harus Anda tanyakan adalah apakah fitur ini bertanggung jawab untuk melayani permintaan ke url/ekstensi tertentu, atau berlaku untuk semua/beberapa permintaan berdasarkan aturan arbitrer. Dalam kasus sebelumnya, Anda harus menjadi handler, dan yang terakhir, modul.

Artikel ini menunjukkan pembuatan modul sederhana, dan handler sederhana, langkah-langkah umum dalam membuat proyek, dan mengkompilasinya, dan langkah-langkah spesifik untuk menyebarkannya ke server.

Catatan

Anda tidak diharuskan untuk mengembangkan handler jika Anda mengembangkan modul, dan visa-versa.

Memulai: Membuat Proyek Visual Studio

Untuk membangun modul atau handler, Anda harus menghasilkan rakitan .NET (DLL) yang berisi kelas modul/handler. Jika Anda menggunakan alat Visual Studio atau Visual Studio Express, langkah pertama adalah membuat proyek Pustaka Kelas:

  1. Dari menu "File", pilih "Baru", "Proyek ...". Dalam dialog Proyek Baru (di bawah), pilih jenis proyek "Visual C#" dan pilih "Pustaka Kelas" di daftar kanan templat yang diinstal Visual Studio.

    Membuat proyek modul dan handler IIS7 di Visual Studio

  2. Kita harus menambahkan referensi ke rakitan "System.Web.dll" yang berisi API yang digunakan untuk mengembangkan modul dan handler ASP.NET dan IIS. Klik kanan simpul "Referensi" di bawah simpul Proyek di tampilan pohon penjelajah solusi sebelah kanan, pilih "Tambahkan Referensi ...", dan di tab .NET pilih rakitan System.Web, versi 2.0 (di bawah).

    Tambahkan referensi ke System.Web.dll

Catatan

Anda dapat menggunakan rakitan System.Web versi 2.0 pada Windows XP dan Windows Server 2003 jika Anda tidak berencana untuk memanfaatkan API ASP.NET spesifik IIS. Modul dan handler yang dikompilasi yang merujuk perakitan ini dapat disebarkan dan dioperasikan pada IIS pada Windows Vista dan Windows Server 2008 tanpa masalah. Jika Anda ingin menggunakan beberapa API ASP.NET khusus IIS dalam modul Anda, Anda harus mengembangkan pada Windows Vista, Windows Server 2008, atau mendapatkan perakitan System.Web.dll dari .NET Framework 3.5. API khusus IIS mencakup HttpServerUtility.TransferRequest, koleksi HttpResponse.Headers, peristiwa HttpApplication.LogRequest, dan beberapa lainnya.

Menulis Kode: Membangun Modul Sederhana

Tugas pertama adalah membangun modul sederhana. Kemudian dalam artikel, kami juga membangun handler sampel.

Untuk membuat modul, tentukan kelas yang mengimplementasikan antarmuka System.Web.IHttpModule .

  1. Hapus file "class1.cs" yang dihasilkan oleh sistem proyek, dan tambahkan kelas C# baru yang disebut MyModule dengan mengklik kanan pada proyek MyIIS7Project di tampilan pohon sebelah kanan, memilih "Tambahkan", Item baru", memilih "Kelas", dan mengetik di "MyModule.cs" di bidang Nama.

  2. Impor namespace System.Web sehingga kami dapat dengan mudah mengakses jenis di dalamnya.

  3. Buat kelas MyModule kami mengimplementasikan antarmuka IHttpModule , dan tentukan anggota antarmuka Dispose() dan Init(). Lakukan ini dengan cepat dengan mengklik kanan antarmuka IHttpModule dan memilih opsi "Terapkan antarmuka":

    Kelas IHttpModule sederhana di kelas Visual Studio

    Metode Dispose() dimaksudkan untuk membersihkan sumber daya yang tidak dikelola secara deterministik ketika modul sedang dibongkar, sehingga sumber daya dapat dirilis sebelum instans modul diselesaikan oleh pengumpul sampah. Anda dapat membiarkan metode ini kosong sebagian besar waktu.

    Metode Init (konteks HttpApplication) adalah metode utama yang diminati. Perannya adalah melakukan inisialisasi modul Anda, dan menghubungkan modul Anda ke satu atau beberapa peristiwa pemrosesan permintaan yang tersedia di kelas HttpApplication . Selama pemrosesan permintaan, modul Anda akan dipanggil untuk setiap peristiwa yang berlangganannya, memungkinkannya untuk mengeksekusi dan melakukan layanannya. Untuk melakukannya:

  4. Berlangganan ke satu atau beberapa peristiwa pemrosesan permintaan dengan menyambungkan metode pada kelas modul Anda ke salah satu peristiwa pada instans HttpApplication yang disediakan. Metode harus mengikuti tanda tangan delegasi System.EventHandler . Kami mendefinisikan metode baru, yang disebut OnPreExecuteRequestHandler, dan menyambungkannya ke HttpApplication. Peristiwa PreRequestRequestHandlerExecute , yang terjadi tepat sebelum server akan memanggil handler permintaan untuk permintaan:

    public void Init(HttpApplication context) 
    { 
        context.PreRequestHandlerExecute += 
            newEventHandler(OnPreRequestHandlerExecute) 
    }
    

    Menerapkan IHttpModule.Init() di Visual Studio

    Pada titik ini, modul kami disiapkan untuk menerima peristiwa PreRequestHandlerExecute pada setiap permintaan. Anda dapat mengulangi ini untuk semua peristiwa lain yang ingin Anda terima.

  5. Sekarang kita membuat modul kita melakukan sesuatu yang berguna, sesuatu yang mengilustrasikan menggunakan beberapa API ASP.NET yang dapat digunakan modul. Periksa apakah permintaan menentukan header referen, dan jika ya, tolak, sebagai cara konyol untuk mencegah orang menautkan ke situs web Anda dari situs web lain. Kami akan melakukan ini dalam metode OnPreRequestHandlerExecute kami yang dipanggil tepat sebelum handler berjalan pada setiap permintaan:

    public void OnPreRequestHandlerExecute (
       Object source, EventArgs e) 
    { 
       HttpApplication app = (HttpApplication)source; 
       HttpRequest    request = app.Context.Request; 
    
       if (!String.IsNullOrEmpty( request.Headers["Referer"] )) 
       { 
           throw new HttpException(403, 
                                                   "Uh-uh!"); 
       } 
    }
    

    Menerapkan IHttpModule

    Catatan

    Instans HttpApplication disediakan untuk modul Anda melalui argumen sumber , dan memerlukan transmisi. Anda dapat mengakses sisa model objek permintaan dari instans HttpApplication, seperti objek HttpContext, dan objek HttpRequest yang terkandung yang mewakili permintaan.

Kode di atas memeriksa apakah header Referen telah ditentukan, dan jika demikian, ia menolak permintaan dengan kode kesalahan 403 Tidak sah.

Menulis Kode: Membangun Handler Sederhana

Tugas selanjutnya adalah membangun handler sederhana. Sebelumnya dalam artikel, kami membuat modul sampel - kembali jika Anda ingin membaca tentang membangun modul sebagai gantinya.

Untuk membuat handler, kita harus menentukan kelas yang mengimplementasikan antarmuka System.Web.IHttpHandler (kita juga bisa mengimplementasikan System.Web.IHttpAsyncHandler jika kita ingin halaman dijalankan secara asinkron). Untuk melakukannya:

  1. Jika Anda belum melakukannya, hapus file "class1.cs" yang dihasilkan oleh sistem proyek, dan tambahkan kelas C# baru yang disebut MyHandler dengan mengklik kanan proyek MyIIS7Project di tampilan pohon sebelah kanan, memilih "Tambahkan", Item baru", memilih "Kelas", dan mengetik di "MyHandler.cs" di bidang Nama.

  2. Impor namespace System.Web sehingga kami dapat dengan mudah mengakses jenis di dalamnya.

  3. Jadikan kelas MyHandler kami mengimplementasikan antarmuka IHttpHandler , dan tentukan anggota antarmuka IsReusable dan ProcessRequest(). Anda dapat melakukan ini dengan cepat dengan mengklik kanan antarmuka IHttpHandler dan memilih opsi "Terapkan antarmuka":

    Menerapkan antarmuka IHttpHandler di Visual Studio

    IsReusable () menunjukkan apakah instans handler Anda dapat digunakan kembali untuk permintaan berikutnya atau tidak. Dalam beberapa kasus, setelah memproses permintaan, handler Anda mungkin dalam keadaan salah untuk memproses permintaan lain, terutama jika Anda telah menyimpan data tentang permintaan sebelumnya dalam variabel anggota. Perhatikan bahwa runtime tidak akan pernah menggunakan instans yang sama dari handler Anda untuk memproses dua permintaan secara bersamaan, bahkan jika ditandai sebagai dapat digunakan kembali. Jika handler Anda tidak menyimpan status per permintaan dalam variabel anggota dan dapat memiliki fungsi ProcessRequest yang dipanggil sebanyak yang diperlukan, buat properti ini kembali true untuk memungkinkan penggunaan kembali.

    Metode ProcessRequest () adalah titik masuk utama handler. Perannya adalah memproses permintaan yang ditentukan oleh instans HttpRequest yang tersedia dari instans HttpContext yang disediakan, dan menghasilkan respons yang sesuai menggunakan instans HttpResponse juga tersedia di luar HttpContext. Metode ProcessRequest() akan dipanggil oleh runtime selama tahap pemrosesan permintaan ExecuteRequestHandler, dan HANYA JIKA permintaan dipetakan ke handler Anda berdasarkan pemetaan handler yang dikonfigurasi. Ini berbeda dari modul yang menerima pemberitahuan untuk semua permintaan ke aplikasi.

  4. Terapkan properti IsReusable terlebih dahulu. Karena handler kami tidak akan menyimpan status anggota apa pun untuk permintaan tersebut dan akan dapat mendukung beberapa panggilan ke ProcessRequest() dengan permintaan yang berbeda, kami akan menandainya sebagai dapat digunakan kembali dengan mengembalikan true.

    public bool IsReusable
    {
        get { return true; }
    
  5. Terakhir, mari kita terapkan metode ProcessRequest() untuk membuat handler kita benar-benar melakukan sesuatu yang berguna. Untuk menjaga semuanya tetap baik dan sederhana, handler kami akan mengembalikan waktu saat ini di server, secara opsional memungkinkan zona waktu ditentukan dalam string kueri. Tujuan kami adalah untuk dapat meminta URL, seperti http://myserver/time.tm, dan mendapatkan waktu saat ini di server. Selain itu, kita akan dapat mengoordinasikan waktu universal dengan meminta http://myserver/time.tm?utc=true. Berikut adalah implementasi kami:

    public void ProcessRequest(HttpContext context) 
    { 
        DateTime dt; 
        String useUtc = context.Request.QueryString["utc"]; 
        if (!String.IsNullOrEmpty(useUtc) && 
                useUtc.Equals("true")) 
        { 
            dt = DateTime.UtcNow; 
        } 
        else 
        { 
            dt = DateTime.Now; 
        } 
        context.Response.Write( 
            String.Format( "<h1>{0}</h1>", 
                           dt.ToLongTimeString() 
                           ) ); 
    }
    

    Kami menggunakan koleksi HttpRequest.QueryString untuk mengambil variabel QueryString, dan menulis waktu saat ini untuk merespons menggunakan metode HttpResponse.Write . Ini hanyalah sampel dari jenis hal-hal yang dapat Anda pilih untuk dilakukan di handler Anda - kelas HttpRequest memberikan lebih banyak informasi tentang permintaan, dan kelas HttpResponse menyediakan sejumlah cara berbeda untuk membentuk respons yang dikembalikan ke klien.

    Menerapkan IHttpHandler.ProcessRequest di Visual Studio

Handler selesai.

Kode Selesai: Mengkompilasi Modul/Handler

Sekarang setelah modul dan handler diimplementasikan, kita dapat mengkompilasinya ke dalam rakitan yang dapat dimuat ASP.NET saat runtime. Jika Anda menggunakan Visual Studio atau Visual Studio Express, kompilasi proyek langsung dari alat dengan menekan "Ctrl-Shift-B" atau mengklik kanan proyek dan memilih "Build".

Rakitan .DLL akan dihasilkan di <folder ProjectDirectory>\bin\debug, bersama dengan . File simbol PDB yang dapat Anda gunakan untuk men-debug perakitan di server / termasuk baris kode sumber dalam pengecualian selama tahap penelusuran kesalahan proyek Anda.

Jika Anda mengunggah assembly Anda ke server produksi, pastikan untuk mengubah konfigurasi Solusi menjadi "Rilis" dengan mengklik kanan node solusi, memilih Configuration Manager, dan mengubah jenis menjadi Debug. Unggah versi Rilis rakitan (biarkan file PDB di belakang) - ini akan menghapus informasi penelusuran kesalahan dari perakitan, dan mengoptimalkannya menghasilkan kode yang lebih cepat.

Jika Anda tidak menggunakan Visual Studio, kompilasi proyek dengan pengkompilasi baris perintah C# yang disertakan dalam runtime Framework. Untuk mengkompilasi proyek Anda, buka prompt baris perintah (pastikan untuk menjalankan prompt baris perintah dengan opsi "Jalankan sebagai Administrator" jika Anda menggunakan Windows Vista atau Windows Server 2008):

> %windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library /out:MyIIS7Project.dll /debug \*.cs /r:System.Web.dll

Ini menghasilkan file MyIIS7Project.DLL dan MyIIS7Project.PDB. Jika Anda ingin membuat versi rilis rakitan, hilangkan sakelar /debug , dan sertakan sakelar /o untuk mengoptimalkan perakitan.

Menyebarkan Assembly ke Server

Sekarang setelah kami menerapkan modul dan handler kustom, kami menyebarkannya ke aplikasi web kami. Ada sejumlah cara untuk menyebarkan modul atau handler ke aplikasi, dan sejumlah opsi konfigurasi yang dapat Anda gunakan untuk menyesuaikan penyebarannya dengan kebutuhan Anda. Kami mengilustrasikan langkah-langkah penyebaran paling dasar di bawah ini. Untuk diskusi lanjutan tentang opsi penyebaran dan konfigurasi, termasuk cara menyebarkan modul/handler untuk seluruh server, silakan lihat artikel berikutnya dalam seri ini: Menyebarkan Modul dan Penangan IIS (segera hadir).

Langkah-langkah di bawah ini mengasumsikan bahwa Anda menyebarkan modul dan handler ke aplikasi yang ada di server IIS Anda. Jika Anda tidak memiliki aplikasi yang dibuat, gunakan aplikasi akar dari "Situs Web Default" yang biasanya terletak di %systemdrive%\inetpub\wwwroot. Dalam contoh di bawah ini, kami menyebarkan modul dan handler ke aplikasi yang disebut "myiis7project" yang terletak di Situs Web Default.

Untuk menyebarkan modul dan handler, pertama-tama buat perakitan yang berisi implementasinya tersedia untuk aplikasi ASP.NET Anda:

  1. Salin rakitan MyIIS7Project.dll yang dikompilasi sebelumnya ke direktori /BIN yang terletak di akar aplikasi Anda. Jika direktori ini tidak ada, buatlah.

  2. Konfigurasikan modul dan handler yang akan dimuat dalam aplikasi. Buka alat Administrasi IIS7 melalui menu Mulai, ketik inetmgr.exe di kotak mulai/cari dan tekan Enter. Dalam alat ini, klik dua kali pada simpul server Anda di tampilan pohon sebelah kiri, lalu perluas simpul "Situs", dan klik dua kali pada situs atau aplikasi yang ingin Anda tambahkan modul dan handler Anda.

  3. Pilih ikon fitur "Modul", lalu klik tindakan "Tambahkan Modul Terkelola ...", dan dalam kotak dialog yang dihasilkan ketik nama modul (arbitrer) dan jenis modul yang sepenuhnya memenuhi syarat "MyIIS7Modules.MyModule". Perhatikan bahwa Anda juga bisa memilih jenis dalam kotak drop-down, karena alat akan secara otomatis memuat rakitan Anda di bin dan menemukan jenis yang mengimplementasikan antarmuka IHttpModule. Tekan OK untuk menambahkan modul.

    Menambahkan modul IIS7

  4. Tambahkan handler dengan mengklik dua kali simpul situs/aplikasi lagi, dan memilih ikon fitur "Pemetaan Handler". Kemudian, klik tindakan "Tambahkan Handler Terkelola", dan dalam kotak dialog yang dihasilkan tentukan "time.tm" untuk jalur, "MyIIS7Modules.MyHandler" untuk jenis tersebut, dan "MyHandler" untuk nama (arbitrer). Sekali lagi, perhatikan bahwa jenis ada di kotak dropdown karena alat Admin secara otomatis mendeteksi jenis ini di rakitan Anda. Tekan OK untuk menambahkan handler.

    Menambahkan handler IIS7

Konfigurasi aplikasi yang dihasilkan oleh tindakan di atas mengonfigurasi modul MyModule untuk dimuat dalam aplikasi Anda (yang memungkinkannya berjalan untuk semua permintaan), dan memetakan handler MyHandler untuk memproses permintaan ke URL time.tm di dalam aplikasi Anda.

Perhatikan bahwa konfigurasi ini memungkinkan modul dan aplikasi Anda untuk berjalan hanya dalam aplikasi mode Terintegrasi IIS. Jika Anda ingin modul dan handler juga berjalan dalam aplikasi mode Klasik di IIS, dan juga pada versi IIS yang lebih lama, Anda juga harus menambahkan konfigurasi ASP.NET Klasik untuk modul dan handler. Selain itu, saat berjalan dalam mode Klasik pada IIS atau pada versi IIS yang lebih lama, handler Anda mengharuskan Anda untuk membuat pemetaan skrip ekstensi .tm untuk ASP.NET di peta skrip IIS, dan modul Anda hanya berjalan untuk permintaan ke ekstensi yang dipetakan ke ASP.NET. Untuk detail selengkapnya tentang ini, lihat Menyebarkan Modul dan Penangan IIS (segera hadir).

Anda juga dapat menambahkan modul dan handler menggunakan alat baris perintah IIS, AppCmd.exe, atau dengan memanipulasi konfigurasi IIS dari skrip atau kode terkelola, atau dengan menempatkan konfigurasi langsung ke file web.config . Opsi tambahan ini dibahas secara mendalam dalam Menyebarkan modul dan handler IIS (segera hadir).

Menguji Modul dan Handler

Kami telah menyebarkan dan mengonfigurasi modul /handler. Sekarang untuk mengujinya:

  1. Uji handler kami dengan membuat permintaan ke "time.tm" di aplikasi kami. Jika berhasil, kita melihat waktu saat ini di server. Buat permintaan ke aplikasi Anda, misalnya saat http://localhost/myiis7project/time.tm kami menyebarkan handler ke aplikasi myiis7project di Situs Web Default:

    Jika handler disebarkan dengan benar ke aplikasi ini, Anda akan melihat waktu saat ini di server:

    Menguji handler IIS7

    Coba juga meminta http://localhost/myiis7project/time.tm?utc=true untuk menampilkan waktu di UTC.

  2. Uji modul. Buat halaman html sederhana yang disebut page.html di aplikasi Anda yang ditautkan ke URL /time.tm :

    page.html

    <html>
      <body>
          <a href="time.tm">View current server time</a>
      </body>
    </html>
    

    Kemudian, buat permintaan untuk http://localhost/myiis7project/page.html menampilkan tautan. Saat Anda mengklik tautan, Anda mengamati kesalahan:

    Menguji modul IIS7

    Anda dapat bertanya apakah kami tidak hanya meminta URL yang sama ini di atas dan berhasil melihat waktu. Ini karena modul kami dikonfigurasi untuk menolak permintaan ke aplikasi Anda yang menentukan header Referen, yang ditambahkan oleh browser setiap kali pengguna mengklik tautan untuk masuk ke situs web Anda alih-alih hanya mengetik di URL di browser secara langsung. Jadi, ketika Anda meminta URL secara langsung, Anda dapat mengaksesnya - namun, ketika Anda mengikuti tautan dari halaman lain, permintaan Anda ditolak oleh modul kami.

Ringkasan

Dalam artikel ini, kami mengilustrasikan langkah-langkah dasar untuk mengembangkan modul dan handler IIS dengan API ASP.NET yang akrab, dan menyebarkannya ke aplikasi Anda. Kami juga membahas pilihan yang Anda miliki untuk lingkungan pengembangan Anda, dan cara memutuskan kapan harus membangun modul vs. handler. Informasi dalam artikel ini akan memungkinkan Anda membangun modul dan penangan pertama Anda untuk memberdayakan aplikasi IIS Anda.

Anda juga dapat meninjau modul contoh yang memungkinkan autentikasi dasar terhadap ASP. Penyedia Keanggotaan NET dalam Mengembangkan Modul menggunakan .NET.

Pastikan untuk memeriksa lebih banyak contoh tentang bagaimana modul dan penangan IIS terkelola dapat menambahkan nilai ke aplikasi Anda, dan mengunduhnya untuk aplikasi Anda dengan mengunjungi Mengalihkan permintaan ke aplikasi Anda dengan modul HttpRedirection, Mendapatkan daftar direktori yang terlihat bagus untuk situs web IIS Anda dengan DirectoryListingModule, dan Menampilkan ikon file cantik di aplikasi ASP.NET Anda dengan IconHandler.