Qual è la differenza tra la modalità di pipeline 'classica' e 'integrata' in IIS7?


491

Ieri sera stavo distribuendo un'applicazione ASP.NET MVC e ho scoperto che è meno lavoro implementare con IIS7 impostato in modalità integrata. La mia domanda è: qual è la differenza? E quali sono le implicazioni dell'uso dell'uno o dell'altro?


10
In che modo è stato meno complicato implementare con la modalità integrata vs classica? Solo curioso
Peter Lillevold,

9
@Peter: gli URL senza estensione devono essere mappati manualmente in modalità classica.
Mehrdad Afshari,

2
anche in MVC Global.asax le note recitano: Per istruzioni sull'abilitazione della modalità classica IIS6 o IIS7, visitare go.microsoft.com/?LinkId=9394801 . Oppure puoi semplicemente attivare la modalità integrata e includere l'assemblaggio System.Web.Mvc e tutto funziona.
Jon Erickson,

Risposte:


643

La modalità classica (l'unica modalità in IIS6 e precedenti) è una modalità in cui IIS funziona solo con estensioni ISAPI e filtri ISAPI direttamente. In effetti, in questa modalità, ASP.NET è solo un'estensione ISAPI (aspnet_isapi.dll) e un filtro ISAPI (aspnet_filter.dll). IIS tratta semplicemente ASP.NET come un plugin esterno implementato in ISAPI e funziona con esso come una scatola nera (e solo quando è necessario distribuire la richiesta ad ASP.NET). In questa modalità, ASP.NET non è molto diverso da PHP o altre tecnologie per IIS.

La modalità integrata, d'altra parte, è una nuova modalità in IIS7 in cui la pipeline IIS è strettamente integrata (ovvero è la stessa) della pipeline di richieste ASP.NET. ASP.NET può vedere ogni richiesta che desidera e manipolare le cose lungo la strada. ASP.NET non è più trattato come un plugin esterno. È completamente miscelato e integrato in IIS. In questa modalità, ASP.NET HttpModuleha praticamente la stessa potenza di un filtro ISAPI e ASP.NET HttpHandlerpuò avere capacità quasi equivalenti come un'estensione ISAPI. In questa modalità, ASP.NET è fondamentalmente una parte di IIS.


8
è integrato più lentamente del classico?
Alex Nolasco,

Non sono sicuro se sia corretto affermare che asp.net fa parte di IIS. Sembrano prodotti separati (anche se integrati). Potrei sbagliarmi.
Andrew Savinykh,

@MehrdadAfshari La gestione di HttpModulesmetodi / eventi in iis7ha più funzionalità rispetto a in iis6? puoi approfondire questo?
Royi Namir,

E per aggiungere, in modalità Pipeline integrata, ogni fase della pipeline di richiesta viene esposta come evento in cui la mappatura dei gestori potrebbe essere ignorata nell'applicazione. Ad esempio, è possibile definire una risorsa integrata HttpHandler, per un certo tipo di percorsi e mapparli al gestore personalizzato tramite il gestore del percorso.
Ren,

1
Una risposta perfetta a tale domanda dovrebbe almeno fare riferimento a uno degli articoli di Microsoft, come iis.net/learn/application-frameworks/… .
Lex Li,

115

Modalità pool di applicazioni integrate

Quando un pool di applicazioni è in modalità integrata, è possibile sfruttare l'architettura integrata di elaborazione delle richieste di IIS e ASP.NET. Quando un processo di lavoro in un pool di applicazioni riceve una richiesta, la richiesta passa attraverso un elenco ordinato di eventi. Ogni evento chiama i moduli nativi e gestiti necessari per elaborare parti della richiesta e generare la risposta.

Esistono diversi vantaggi nell'esecuzione di pool di applicazioni in modalità integrata. Innanzitutto i modelli di elaborazione delle richieste di IIS e ASP.NET sono integrati in un modello di processo unificato. Questo modello elimina i passaggi precedentemente duplicati in IIS e ASP.NET, come l'autenticazione. Inoltre, la modalità integrata consente la disponibilità delle funzionalità gestite per tutti i tipi di contenuto.

Modalità pool di applicazioni classico

Quando un pool di applicazioni è in modalità classica, IIS 7.0 gestisce le richieste come nella modalità di isolamento del processo di lavoro di IIS 6.0. Le richieste ASP.NET eseguono prima le fasi di elaborazione nativa in IIS e vengono quindi instradate su Aspnet_isapi.dll per l'elaborazione del codice gestito nel runtime gestito. Infine, la richiesta viene reindirizzata tramite IIS per inviare la risposta.

Questa separazione dei modelli di elaborazione delle richieste IIS e ASP.NET comporta la duplicazione di alcune fasi di elaborazione, come l'autenticazione e l'autorizzazione. Inoltre, le funzionalità del codice gestito, come l'autenticazione basata su moduli, sono disponibili solo per le applicazioni ASP.NET o per le applicazioni per le quali è stato mappato lo script tutte le richieste che devono essere gestite da aspnet_isapi.dll.

Assicurarsi di testare la compatibilità delle applicazioni esistenti in modalità integrata prima di aggiornare un ambiente di produzione a IIS 7.0 e assegnare le applicazioni ai pool di applicazioni in modalità integrata. È necessario aggiungere un'applicazione a un pool di applicazioni in modalità classica se l'applicazione non funziona in modalità integrata. Ad esempio, l'applicazione potrebbe fare affidamento su un token di autenticazione passato da IIS al runtime gestito e, a causa della nuova architettura in IIS 7.0, il processo interrompe l'applicazione.

Tratto da: Qual è la differenza tra DefaultAppPool e Classic .NET AppPool in IIS7?

Fonte originale: Introduzione all'architettura IIS


28
Frase chiave nell'ultimo paragrafo: "È necessario aggiungere un'applicazione a un pool di applicazioni in modalità classica se l'applicazione non funziona in modalità integrata."
DavidRR

6
@JsonStatham: uno dei motivi è che la modalità integrata non può utilizzare la rappresentazione ASP.NET (Siti> YourSite> IIS> Autenticazione). Se si dispone di un sito Intranet e si utilizza l'autenticazione di Windows, questa è una considerazione importante. link
user3308241

11

IIS 6.0 e versioni precedenti:

ASP.NET integrato con IIS tramite un'estensione ISAPI, un'API C (API basata sul linguaggio di programmazione C) ed esposto la propria applicazione e il modello di elaborazione delle richieste.

Ciò ha effettivamente rivelato due pipeline separate di server (richiesta / risposta), una per i filtri ISAPI nativi e i componenti di estensione, e un'altra per i componenti dell'applicazione gestiti. I componenti ASP.NET verrebbero eseguiti interamente all'interno della bolla di estensione ISAPI ASP.NET E SOLO per le richieste associate ad ASP.NET nella configurazione della mappa di script IIS.

Richieste a tipi di contenuto non ASP.NET: - immagini, file di testo, pagine HTML e pagine ASP senza script, sono state elaborate da IIS o altre estensioni ISAPI e NON erano visibili ad ASP.NET.

La principale limitazione di questo modello era che i servizi forniti dai moduli ASP.NET e il codice dell'applicazione ASP.NET personalizzato NON erano disponibili per le richieste non ASP.NET

Che cos'è una MAPPA SCRIPT?

Le mappe di script vengono utilizzate per associare le estensioni di file al gestore ISAPI che viene eseguito quando viene richiesto quel tipo di file. La mappa degli script ha anche un'impostazione opzionale che verifica l'esistenza del file fisico associato alla richiesta prima di consentire l'elaborazione della richiesta

Un buon esempio può essere seen here

IIS 7 e versioni successive

IIS 7.0 e versioni successive sono stati riprogettati da zero per fornire un nuovissimo ISAPI basato su API C ++.

IIS 7.0 e versioni successive integrano il runtime ASP.NET con le funzionalità principali del server Web, fornendo una pipeline di elaborazione delle richieste unificata (singola) esposta a componenti nativi e gestiti noti come moduli (IHttpModules)

Ciò significa che IIS 7 elabora le richieste che arrivano per qualsiasi tipo di contenuto, con entrambi NON ASP.NET Modules / native IIS modulese ASP.NET modulesfornendo l'elaborazione delle richieste in tutte le fasi Questo è il motivo per cui i tipi di contenuto NON ASP.NET (.html, file statici) possono essere gestiti dai moduli .NET .

  • È possibile creare nuovi moduli gestiti ( IHttpModule) che hanno la capacità di essere eseguiti per tutto il contenuto dell'applicazione e hanno fornito un set avanzato di servizi di elaborazione delle richieste all'applicazione.
  • Aggiungi nuovi gestori gestiti ( IHttpHandler)

5

In modalità classica IIS funziona direttamente con estensioni ISAPI e filtri ISAPI. E utilizza due linee di tubazioni, una per il codice nativo e l'altra per il codice gestito. Si può semplicemente dire che in modalità classica IIS 7.x funziona esattamente come IIS 6 e non si ottengono benefici extra dalle funzionalità di IIS 7.x.

In modalità integrata IIS e ASP.Net sono strettamente accoppiati anziché in base a due sole DLL su Asp.net come nel caso della modalità classica.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.