IIS7'de 'klasik' ve 'tümleşik' boru hattı modu arasındaki fark nedir?


491

Dün gece bir ASP.NET MVC uygulaması dağıtıyordum ve IIS7 ile tümleşik kipte konuşlandırmanın daha az iş olduğunu öğrendim. Benim sorum fark nedir? Ve birini veya diğerini kullanmanın etkileri nelerdir?


10
Entegre mod ile klasik mod arasında konuşlandırma yapmak daha az nasıldı? Just curious
Peter Lillevold

9
@Peter: uzantısız URL'lerin klasik modda manuel olarak eşlenmesi gerekir.
Mehrdad Afshari

2
MVC Global.asax'ta bile şu notları okuyun: IIS6 veya IIS7 klasik modunu etkinleştirme talimatları için go.microsoft.com/?LinkId=9394801 adresini ziyaret edin . Veya entegre modu açıp System.Web.Mvc derlemesini dahil edebilirsiniz ve her şey çalışır.
Jon Erickson

Yanıtlar:


643

Klasik mod (IIS6 ve altındaki tek mod), IIS'nin yalnızca doğrudan ISAPI uzantıları ve ISAPI filtreleriyle çalıştığı bir moddur. Aslında, bu modda, ASP.NET sadece bir ISAPI uzantısıdır (aspnet_isapi.dll) ve bir ISAPI filtresi (aspnet_filter.dll). IIS, ASP.NET'i ISAPI'de uygulanan harici bir eklenti olarak ele alır ve kara kutu gibi çalışır (ve yalnızca ASP.NET'e istek vermesi gerektiğinde). Bu modda, ASP.NET PHP veya IIS için diğer teknolojilerden çok farklı değildir.

Diğer yandan, tümleşik mod, IIS7'de, IIS boru hattının ASP.NET istek boru hattıyla sıkı bir şekilde tümleşik olduğu (yani, yalnızca aynı olduğu) yeni bir moddur. ASP.NET istediği her isteği görebilir ve işleri yol boyunca değiştirebilir. ASP.NET artık harici bir eklenti olarak değerlendirilmiyor. Tamamen karıştırılmış ve IIS'ye entegre edilmiştir. Bu modda, ASP.NET HttpModuleler temel olarak bir ISAPI filtresinin sahip olabileceği kadar güce sahiptir ve ASP.NET HttpHandlerler bir ISAPI uzantısının sahip olabileceği neredeyse eşdeğer kapasiteye sahip olabilir. Bu modda, ASP.NET temel olarak IIS'nin bir parçasıdır.


8
klasikten daha yavaş entegre mi?
Alex Nolasco

Asp.net'in IIS'nin bir parçası olduğunu söylemenin doğru olup olmadığından emin değilim. Ayrı (entegre de olsa) ürünler gibi görünürler. Yanlış olabilirim.
Andrew Savinykh

@MehrdadAfshari HttpModulesYöntemlerle / olaylarla uğraşmak iis7, olduğundan daha fazla işlevselliğe sahip iis6mi? bu konuyu biraz açıklayabilir misin?
Royi Namir

Ve Entegre Boru Hattı modunda, istek boru hattındaki her aşama, uygulamada işleyicilerin eşlemesinin geçersiz kılınabileceği bir olay olarak ortaya çıkar. Örneğin, belirli bir rota türü için gömülü bir kaynak HttpHandler tanımlanabilir ve bunları rota işleyicisi aracılığıyla özel işleyicinize eşleyebilirsiniz.
Ren

1
Bu soruya mükemmel bir cevap, en azından iis.net/learn/application-frameworks/… gibi Microsoft makalelerinden birine atıfta bulunmalıdır .
Lex Li

115

Entegre uygulama havuzu modu

Uygulama havuzu Tümleşik moddayken, IIS ve ASP.NET'in tümleşik istek işleme mimarisinden yararlanabilirsiniz. Uygulama havuzundaki bir alt işlem bir istek aldığında, istek sıralı bir olaylar listesinden geçer. Her olay, isteğin bölümlerini işlemek ve yanıtı oluşturmak için gerekli yerel ve yönetilen modülleri çağırır.

Uygulama havuzlarını Tümleşik modda çalıştırmanın birçok avantajı vardır. İlk olarak IIS ve ASP.NET'in istek işleme modelleri birleştirilmiş bir işlem modeliyle tümleştirilir. Bu model, daha önce IIS ve ASP.NET'te kimlik doğrulama gibi çoğaltılan adımları ortadan kaldırır. Ayrıca, Tümleşik mod, yönetilen özelliklerin tüm içerik türlerinde kullanılabilir olmasını sağlar.

Klasik uygulama havuzu modu

Bir uygulama havuzu Klasik moddayken, IIS 7.0 istekleri IIS 6.0 çalışan işlemi yalıtım modundaki gibi işler. ASP.NET istekleri önce IIS'de yerel işlem adımlarından geçer ve yönetilen çalışma zamanında yönetilen kodun işlenmesi için Aspnet_isapi.dll dosyasına yönlendirilir. Son olarak, istek yanıtı göndermek için istek IIS üzerinden yönlendirilir.

IIS ve ASP.NET istek işleme modellerinin bu şekilde ayrılması, kimlik doğrulama ve yetkilendirme gibi bazı işlem adımlarının çoğaltılmasına neden olur. Ayrıca, form kimlik doğrulaması gibi yönetilen kod özellikleri yalnızca ASP.NET uygulamaları veya aspnet_isapi.dll tarafından işlenecek tüm istekleri komut dosyası eşleştirdiğiniz uygulamalar için kullanılabilir.

Bir üretim ortamını IIS 7.0'a yükseltmeden ve uygulamaları Tümleşik moddaki uygulama havuzlarına atamadan önce mevcut uygulamalarınızı Tümleşik modda uyumluluk açısından sınadığınızdan emin olun. Uygulama havuzuna Klasik modda bir uygulama eklemeniz gerekir, ancak uygulama Entegre modda çalışmazsa. Örneğin, uygulamanız IIS'den yönetilen çalışma zamanına geçirilen bir kimlik doğrulama belirtecine güvenebilir ve IIS 7.0'daki yeni mimari nedeniyle işlem uygulamanızı bozar.

Alınan: IIS7'de DefaultAppPool ve Classic .NET AppPool arasındaki fark nedir?

Orijinal kaynak: IIS Mimarisine Giriş


28
Son paragraftaki anahtar cümle: "Klasik modda bir uygulama havuzuna uygulama eklemeniz gerekir, ancak uygulama Entegre modda çalışmazsa."
DavidRR

6
@JsonStatham - Bunun bir nedeni, Tümleşik Mod'un ASP.NET Kimliğe Bürünme'yi (Sites> Siteniz> IIS> Kimlik Doğrulaması) kullanamamasıdır. Bir Intranet siteniz varsa ve Windows Kimlik Doğrulaması kullanıyorsanız, bu önemli bir husustur. bağlantı
user3308241

11

IIS 6.0 ve önceki sürümleri:

ASP.NET, IIS ile bir ISAPI uzantısı, bir C API (C Programlama dili tabanlı API) aracılığıyla entegre edildi ve kendi uygulama ve istek işleme modelini ortaya çıkardı.

Bu, biri yerel ISAPI filtreleri ve uzantı bileşenleri için, diğeri yönetilen uygulama bileşenleri için olmak üzere iki ayrı sunucu (istek / yanıt) boru hattını etkili bir şekilde ortaya çıkardı. ASP.NET bileşenleri tamamen ASP.NET ISAPI uzantı balonunun içinde yürütülür ve SADECE IIS komut dosyası eşleme yapılandırmasında ASP.NET ile eşlenen istekler için.

ASP.NET dışı içerik türlerine yönelik istekler: - resimler, metin dosyaları, HTML sayfaları ve komut dosyası içermeyen ASP sayfaları, IIS veya diğer ISAPI uzantıları tarafından işlendi ve ASP.NET tarafından görülmedi.

Bu modelin en büyük sınırlaması, ASP.NET modülleri ve özel ASP.NET uygulama kodu tarafından sağlanan hizmetlerin ASP.NET dışı isteklerde KULLANILMAMASI idi.

SCRIPT HARİTASI nedir?

Komut dosyası eşlemeleri, dosya uzantılarını, bu dosya türü istendiğinde çalışan ISAPI işleyicisiyle ilişkilendirmek için kullanılır. Komut dosyası eşleminde ayrıca, isteğin işlenmesine izin vermeden önce istekle ilişkili fiziksel dosyanın var olduğunu doğrulayan isteğe bağlı bir ayar bulunur.

İyi bir örnek olabilir seen here

IIS 7 ve üstü

IIS 7.0 ve üstü, yepyeni bir C ++ API tabanlı ISAPI sağlamak için sıfırdan yeniden tasarlanmıştır.

IIS 7.0 ve üstü, ASP.NET çalışma zamanını Web Sunucusu'nun temel işlevleriyle tümleştirerek, modüller (IHttpModules) olarak bilinen hem yerel hem de yönetilen bileşenlere maruz kalan birleştirilmiş (tek) istek işleme ardışık düzenini sağlar

Bunun anlamı, IIS 7'nin herhangi bir içerik türü için gelen istekleri, her ikisiyle birlikte NON ASP.NET Modules / native IIS modulesve ASP.NET modulestüm aşamalarda istek işleme sağlamasıdır. NON ASP.NET içerik türlerinin (.html, statik dosyalar) .NET modülleri tarafından işlenmesinin nedeni budur. .

  • IHttpModuleTüm uygulama içeriği için yürütme yeteneğine sahip yeni yönetilen modüller ( ) oluşturabilir ve uygulamanıza gelişmiş bir istek işleme hizmetleri seti sağlayabilirsiniz.
  • Yeni yönetilen İşleyiciler ekle ( IHttpHandler)

5

Klasik modda IIS h ISAPI uzantılarını ve ISAPI filtrelerini doğrudan çalışır. Ve biri yerel kod için diğeri yönetilen kod için olmak üzere iki boru hattı kullanır. Klasik modda IIS 7.x'in tıpkı IIS 6 gibi çalıştığını ve IIS 7.x özelliklerinden ek avantajlar elde edemeyeceğinizi söyleyebilirsiniz.

Entegre modda IIS ve ASP.Net, klasik modda olduğu gibi Asp.net'teki iki DLL'ye bağlı olarak sıkıca bağlanır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.