2009-07-07 11 views
73

In particolare, quali sono le implicazioni del codice in esecuzione in due diversi domini dell'applicazione?Che cos'è un dominio di applicazione .NET?

Come vengono normalmente trasferiti i dati attraverso il limite del dominio dell'applicazione? È lo stesso che passare i dati attraverso il limite del processo? Sono curioso di sapere di più su questa astrazione e su cosa è utile.

EDIT: Buona esistente copertura della classe AppDomain in generale a I don't understand Application Domains

+3

La prima parte è un duplicato di http://stackoverflow.com/questions/622516/i-dont-understand-appdomains. Forse la domanda dovrebbe essere modificata per il passaggio dei dati. –

+0

Woops, mancava quello. Questo può essere chiuso. – Luke

risposta

69

Un AppDomain fornisce essenzialmente una regione isolata in cui il codice viene eseguito all'interno di un processo.

Un modo semplice per pensarci è quasi come un processo più leggero seduto all'interno del processo principale. Ogni AppDomain esiste all'interno di un processo in completo isolamento, che consente di eseguire il codice in modo sicuro (può essere scaricato senza abbattere l'intero processo se necessario), con sicurezza separata, ecc.

Come per le tue specifiche - se corri codice in 2 AppDomain diversi all'interno di un processo, il codice verrà eseguito separatamente. Qualsiasi comunicazione tra AppDomains verrà serializzata o gestita tramite MarshallByRefObject. Si comporta in modo molto simile all'utilizzo di servizi remoti in questo senso. Ciò fornisce un'enorme quantità di sicurezza: puoi eseguire codice di cui non ti fidi e, se fa qualcosa di sbagliato, non ti influenza.

Ci sono molti altri dettagli nella descrizione di MSDN Application Domains.

+0

Puoi chiarire cosa intendi con "se fa qualcosa di sbagliato"? – Luke

+8

Un esempio: se si dispone di una discussione non gestita in un threadpool, questo eliminerà il dominio dell'app. Normalmente questo ucciderà il tuo processo - che è pericoloso se stai caricando un codice utente o un plugin. Esecuzione in un appdomain separato significa che puoi gestirlo meglio - se il secondo AppDomain deve essere abbattuto, puoi gestirlo senza abbattere il tuo processo. –

18

È uno strato di isolamento fornito da .NET Runtime. In quanto tale, i domini App convivono in un processo (1 processo può avere molti domini app) e hanno il loro spazio di indirizzi virtuali.

domini App sono utili perché:

  • Sono meno costosi rispetto ai processi pieni
  • Sono multithread
  • ci si può fermare uno senza uccidere tutto nel processo di
  • segregazione delle risorse/config/etc
  • Ogni dominio di app viene eseguito sul proprio livello di sicurezza
0

Ogni applicazione eseguita all'interno di un processo, AppDomain è anche un processo leggero o possiamo dire unità logica che ha un gruppo di assiemi (questo è un contenitore che contiene un gruppo di assiemi) e questo esiste all'interno del processo a livello di isolamento dello stesso processo, ciò consente di eseguire più assiemi all'interno dello stesso processo e impedirne l'accesso diretto.

Esecuzione Dot Net Application Entro dominio di applicazione: volta ogni run applicazione dot net, Operazione shell di sistema di carico CLR in un processo e il nuovo dominio di applicazione state create nello stesso processo e caricare tutte le assemblee nel dominio di applicazione creata, ora da il codice AppDomain verrà eseguito.

Quando personalizzato AppDomain: Possiamo creare proprio AppDomain, ora la cosa è in quale scenario possiamo creare proprio AppDomain. Supponiamo di dover eseguire l'aggiunta o la rimozione degli assembly senza interrompere l'applicazione in esecuzione, quindi possiamo creare il proprio AppDomain.

1

Se lo si guarda dalla prospettiva dei dettagli interni del processore, imposta un valore diverso per il registro Segmento codice (CS). codice e CS: il registro IP (Instruction Pointer) è quello che è in esecuzione dal processore.

(Ho scelto di sfogliare la discussione relativa alla tabella delle pagine per brevità).

AppDomain contrassegna questo limite. per la sicurezza del codice.

La ragione per dare questo sfondo è farla franca con domande di questo tipo: 1. come possiamo accedere alle risorse attraverso due domini dell'app (sì usando pipe o altro meccanismo di condivisione non direttamente come CS: IP non può essere impostato a qualche altro AppDomain. E 'solo il sistema operativo che può farlo. Non il CLR)

  1. ci potrebbe essere più thread nel dominio app. Tecnicamente sì come il valore CS sta per essere nel processo corrente. si può cambiare IP a qualcos'altro da una dichiarazione salto (funzione di chiamata/goto combinazione)

  2. possono due thread in due diversi domini applicazione comunicare (No. riferimento punto 1.)

  3. can due thread in singola dominio dominio app (Sì. punto di riferimento 2)

a molte altre combinazioni di questi casi si potrebbe rispondere con poca conoscenza di come CS: IP funziona.

Problemi correlati