2011-08-29 13 views
7

Ho un sito Web e un servizio Web nella stessa directory virtuale e alcune pagine Web chiamano il servizio web.IIS AppDomain istanza

Quando viene chiamato il servizio Web, IIS crea un nuovo AppDomain o esegue il servizio Web nello stesso AppDomain?

C'è un'impostazione per questo? Su una delle mie macchine sembra che crei un nuovo AppDomain. La modifica della modalità del pool di applicazioni da Integrated vs Classic influisce su questo?

+0

Servizio Web WCF o ASP .NET? – Jeff

risposta

8

I pool di applicazioni IIS eseguono un singolo processo di lavoro (per impostazione predefinita). All'interno di quel processo di lavoro, viene creato uno AppDomain per ogni Applicazione IIS (sito Web). Per quanto ne so, qualsiasi codice in esecuzione all'interno di tale Applicazione IIS verrà eseguito nello stesso AppDomain (a meno che, naturalmente, non si stiano creando i propri domini applicazione figlio nel codice). È possibile regolare il numero di processi di lavoro per sito Web, ma realisticamente farlo solo se si riscontrano problemi di prestazioni (che non possono essere risolti separando i pool di applicazioni). Se si eseguono più domini applicativi per sito Web, il codice in esecuzione in quei domini applicazione separati non può condividere lo stato (ad esempio, la sessione InProc) e può comunicare solo attraverso la serializzazione, non è l'ideale.

Per quanto riguarda ASP.NET e WCF; quando sono ospitati in IIS, per impostazione predefinita vengono eseguiti in modalità side-by-side, all'interno dello stesso AppDomain, questo consente loro di condividere lo stato, ma le richieste WCF non vengono elaborate dal runtime ASP.NET, mentre le chiamate ai servizi WCF vengono intercettate ed elaborate dal runtime WCF. (Sebbene le chiamate ai file .svc vengano comunque instradate inizialmente tramite ASP.NET). Nella modalità side-by-side, le chiamate WCF non obbediscono a configurazione, sicurezza, furto d'identità ecc. Che potresti aver configurato per il tuo sito Web ASP.NET.

WCF su IIS può anche essere eseguito in modalità di compatibilità ASP.NET, in cui l'implementazione di WCF è gestita da un gestore HTTP e quindi viene elaborata anche dalla pipeline di ASP.NET. Se si considera che i servizi richiedono solo il supporto HTTP, è possibile considerare di ospitare il servizio in modalità compatibilità per ottenere l'accesso alla potenza e alla flessibilità della pipeline ASP.NET.

Per quanto riguarda la modalità di pipeline integrata e classica, in modalità Intergrated, ASP.NET viene eseguito da w3wp.exe come parte integrante della pipeline di elaborazione di IIS. Ciò significa che qualsiasi cosa utilizzi gestori personalizzati, ecc., Che potresti aver collegato alla pipeline (anche quando servi contenuti non -ASP.NET, ad es. PHP), verrà caricato ed eseguito nello stesso AppDomain.

In modalità classica, ASP.NET viene eseguito nel suo processo di lavoro proprietario, aspnet_wp.exe ed è connesso alla pipeline di elaborazione IIS come filtro ISAPI. Credo che la stessa meccanica intorno all'utilizzo di AppDomain si applichi anche qui.

Problemi correlati