Apa perbedaan antara mode pipeline 'klasik' dan 'terintegrasi' di IIS7?

491

Saya menggunakan aplikasi ASP.NET MVC tadi malam, dan menemukan bahwa kurang bekerja untuk menggunakan IIS7 yang diatur ke mode terintegrasi. Pertanyaan saya adalah apa bedanya? Dan apa implikasi dari menggunakan satu atau yang lain?

Jon Erickson
sumber
10
Bagaimana itu kurang bekerja untuk digunakan dengan mode terintegrasi vs klasik? Hanya ingin tahu
Peter Lillevold
9
@ Peter: URL tanpa ekstensi perlu dipetakan secara manual dalam mode klasik.
Mehrdad Afshari
2
bahkan di MVC Global.asax catatan berbunyi: Untuk instruksi tentang mengaktifkan mode klasik IIS6 atau IIS7, kunjungi go.microsoft.com/?LinkId=9394801 . Atau Anda bisa langsung mengaktifkan mode terintegrasi dan menyertakan perakitan System.Web.Mvc dan semuanya berfungsi.
Jon Erickson

Jawaban:

643

Mode klasik (satu-satunya mode di IIS6 dan di bawah) adalah mode di mana IIS hanya bekerja dengan ekstensi ISAPI dan filter ISAPI secara langsung. Bahkan, dalam mode ini, ASP.NET hanyalah ekstensi ISAPI (aspnet_isapi.dll) dan filter ISAPI (aspnet_filter.dll). IIS hanya memperlakukan ASP.NET sebagai plugin eksternal yang diimplementasikan di ISAPI dan bekerja dengannya seperti kotak hitam (dan hanya jika perlu memberikan permintaan ke ASP.NET). Dalam mode ini, ASP.NET tidak jauh berbeda dari PHP atau teknologi lainnya untuk IIS.

Mode terintegrasi, di sisi lain, adalah mode baru di IIS7 di mana pipa IIS terintegrasi erat (yaitu sama) dengan pipa permintaan ASP.NET. ASP.NET dapat melihat setiap permintaan yang diinginkan dan memanipulasi hal-hal di sepanjang jalan. ASP.NET tidak lagi diperlakukan sebagai plugin eksternal. Ini sepenuhnya dicampur dan terintegrasi dalam IIS. Dalam mode ini, ASP.NET HttpModulepada dasarnya memiliki kekuatan yang hampir sama dengan yang dimiliki filter ISAPI dan ASP.NET HttpHandlerdapat memiliki kemampuan yang hampir sama dengan ekstensi ISAPI. Dalam mode ini, ASP.NET pada dasarnya adalah bagian dari IIS.

Mehrdad Afshari
sumber
8
Apakah terintegrasi lebih lambat daripada klasik?
Alex Nolasco
Saya tidak yakin apakah benar untuk mengatakan bahwa asp.net adalah bagian dari IIS. Mereka terlihat seperti produk yang terpisah (meskipun terintegrasi). Saya bisa saja salah.
Andrew Savinykh
@MehrdadAfshari Apakah berurusan dengan HttpModulesmetode / acara di iis7memiliki lebih banyak fungsi daripada di iis6? Dapatkah Anda menguraikan itu ?
Royi Namir
Dan untuk menambahkan, dalam mode Pipeline Terpadu, setiap tahapan dalam pipeline permintaan diekspos sebagai peristiwa pemetaan penangan bisa ditimpa dalam aplikasi. Misalnya, seseorang dapat mendefinisikan sumber daya yang tertanam HttpHandler, untuk jenis rute tertentu dan memetakannya ke penangan kustom Anda melalui penangan rute.
Ren
1
Sebuah jawaban sempurna untuk pertanyaan seperti itu, setidaknya harus merujuk ke salah satu artikel Microsoft, seperti iis.net/learn/aplikasi-frameworks/… .
Lex Li
115

Mode kumpulan aplikasi terintegrasi

Ketika kumpulan aplikasi dalam mode Terpadu, Anda dapat mengambil keuntungan dari arsitektur pemrosesan-permintaan terintegrasi IIS dan ASP.NET. Ketika seorang pekerja proses dalam kumpulan aplikasi menerima permintaan, permintaan melewati daftar acara yang dipesan. Setiap peristiwa memanggil modul asli dan dikelola yang diperlukan untuk memproses bagian dari permintaan dan menghasilkan respons.

Ada beberapa manfaat untuk menjalankan kumpulan aplikasi dalam mode Terpadu. Pertama model pemrosesan-permintaan IIS dan ASP.NET diintegrasikan ke dalam model proses terpadu. Model ini menghilangkan langkah-langkah yang sebelumnya diduplikasi dalam IIS dan ASP.NET, seperti otentikasi. Selain itu, mode Terpadu memungkinkan ketersediaan fitur yang dikelola untuk semua jenis konten.

Mode kumpulan aplikasi klasik

Ketika kumpulan aplikasi dalam mode Klasik, IIS 7.0 menangani permintaan seperti dalam mode isolasi proses pekerja IIS 6.0. Permintaan ASP.NET terlebih dahulu melalui langkah-langkah pemrosesan asli di IIS dan kemudian dialihkan ke Aspnet_isapi.dll untuk memproses kode yang dikelola dalam runtime yang dikelola. Akhirnya, permintaan dialihkan kembali melalui IIS untuk mengirim respons.

Pemisahan model pemrosesan-permintaan IIS dan ASP.NET ini menghasilkan duplikasi beberapa langkah pemrosesan, seperti otentikasi dan otorisasi. Selain itu, fitur kode terkelola, seperti otentikasi formulir, hanya tersedia untuk aplikasi ASP.NET atau aplikasi yang skrip Anda memetakan semua permintaan untuk ditangani oleh aspnet_isapi.dll.

Pastikan untuk menguji kompatibilitas aplikasi Anda yang ada dalam mode Terpadu sebelum memutakhirkan lingkungan produksi ke IIS 7.0 dan menugaskan aplikasi ke kumpulan aplikasi dalam mode Terpadu. Anda hanya harus menambahkan aplikasi ke kumpulan aplikasi dalam mode Klasik jika aplikasi gagal bekerja dalam mode Terpadu. Misalnya, aplikasi Anda mungkin bergantung pada token otentikasi yang diteruskan dari IIS ke runtime yang dikelola, dan, karena arsitektur baru di IIS 7.0, proses tersebut memecah aplikasi Anda.

Diambil dari: Apa perbedaan antara DefaultAppPool dan Classic .NET AppPool di IIS7?

Sumber asli: Pengantar Arsitektur IIS

BrainCoder
sumber
28
Kalimat kunci dalam paragraf terakhir: "Anda seharusnya hanya menambahkan aplikasi ke kumpulan aplikasi dalam mode Klasik jika aplikasi gagal bekerja dalam mode Terpadu."
DavidRR
6
@JsonStatham - Salah satu alasannya adalah Mode Terpadu tidak dapat menggunakan Peniruan ASP.NET (Situs> YourSite> IIS> Otentikasi). Jika Anda memiliki situs Intranet dan menggunakan Windows Authentication, ini merupakan pertimbangan penting. tautan
user3308241
11

IIS 6.0 dan versi sebelumnya:

ASP.NET terintegrasi dengan IIS melalui ekstensi ISAPI, API C (API berbasis bahasa Pemrograman C) dan membuka aplikasi sendiri dan model pemrosesan permintaan.

Ini secara efektif memaparkan dua jalur pipa server (permintaan / respons) yang terpisah, satu untuk filter ISAPI asli dan komponen ekstensi, dan satu lagi untuk komponen aplikasi yang dikelola. Komponen ASP.NET akan mengeksekusi seluruhnya di dalam gelembung ekstensi ASP.NET ISAPI DAN HANYA untuk permintaan yang dipetakan ke ASP.NET dalam konfigurasi peta skrip IIS.

Permintaan untuk jenis konten non ASP.NET: - gambar, file teks, halaman HTML, dan halaman ASP tanpa skrip, diproses oleh IIS atau ekstensi ISAPI lainnya dan TIDAK dapat dilihat oleh ASP.NET.

Keterbatasan utama dari model ini adalah bahwa layanan yang disediakan oleh modul ASP.NET dan kode aplikasi ASP.NET kustom TIDAK tersedia untuk permintaan non ASP.NET

Apa itu PETA SCRIPT?

Peta skrip digunakan untuk mengaitkan ekstensi file dengan penangan ISAPI yang dieksekusi ketika tipe file itu diminta. Peta skrip juga memiliki pengaturan opsional yang memverifikasi bahwa file fisik yang terkait dengan permintaan ada sebelum mengizinkan permintaan untuk diproses

Contoh yang bagus bisa seen here

IIS 7 ke atas

IIS 7.0 dan di atasnya telah direkayasa ulang dari bawah ke atas untuk menyediakan ISAPI berbasis C ++ API yang baru.

IIS 7.0 dan di atasnya mengintegrasikan runtime ASP.NET dengan fungsionalitas inti dari Server Web, menyediakan pipa pemrosesan permintaan tunggal (tunggal) yang terpapar komponen asli dan terkelola yang dikenal sebagai modul (IHttpModules)

Apa artinya ini adalah bahwa IIS 7 memproses permintaan yang datang untuk semua jenis konten, dengan keduanya NON ASP.NET Modules / native IIS modulesdan ASP.NET modulesmenyediakan pemrosesan permintaan di semua tahapan. Ini adalah alasan mengapa jenis konten NON ASP.NET (.html, file statis) dapat ditangani oleh modul .NET .

  • Anda dapat membangun modul terkelola baru ( IHttpModule) yang memiliki kemampuan untuk mengeksekusi untuk semua konten aplikasi, dan menyediakan serangkaian layanan pemrosesan permintaan yang ditingkatkan untuk aplikasi Anda.
  • Tambahkan Penangan terkelola baru ( IHttpHandler)
RC
sumber
5

Dalam mode klasik, IIS berfungsi langsung dengan ekstensi ISAPI dan filter ISAPI. Dan menggunakan dua jalur pipa, satu untuk kode asli dan lainnya untuk kode yang dikelola. Anda dapat mengatakan bahwa dalam mode Klasik IIS 7.x berfungsi seperti halnya IIS 6 dan Anda tidak mendapatkan manfaat tambahan dari fitur IIS 7.x.

Dalam mode terintegrasi IIS dan ASP.Net digabungkan dengan erat daripada hanya bergantung pada dua DLL di Asp.net seperti dalam kasus mode klasik.

Mian
sumber