Domini applicazione

I sistemi operativi e gli ambienti runtime forniscono solitamente una forma di isolamento tra le applicazioni. Windows, ad esempio, utilizza i processi per isolare le applicazioni. L'isolamento è necessario per garantire che il codice in esecuzione in un'applicazione non interferisca con altre applicazioni non correlate.

I domini applicazione forniscono un limite di isolamento per sicurezza, affidabilità e controllo delle versioni, nonché per lo scaricamento degli assembly. I domini applicazione vengono solitamente creati dagli host di runtime, che sono responsabili dell'avvio di Common Language Runtime prima dell'esecuzione di un'applicazione.

Negli argomenti contenuti in questa sezione della documentazione viene illustrato come utilizzare i domini applicazione per fornire un isolamento tra gli assembly.

In questa panoramica sono incluse le sezioni seguenti:

  • Vantaggi dell'isolamento delle applicazioni

  • Argomenti correlati

  • Riferimenti

Vantaggi dell'isolamento delle applicazioni

L'isolamento delle diverse applicazioni in esecuzione sullo stesso computer è sempre stato basato sui limiti dei processi. Ciascuna applicazione viene caricata in un processo separato che consente di isolarla dalle altre applicazioni in esecuzione.

Le applicazioni risultano isolate perché gli indirizzi di memoria sono relativi ai processi. Un puntatore di memoria passato da un processo a un altro non può essere utilizzato in modo significativo nel processo di destinazione. Inoltre, non è possibile effettuare chiamate dirette tra due processi. È invece necessario utilizzare un proxy, che fornisce un livello di riferimento indiretto.

Il codice gestito deve essere sottoposto a verifica prima che sia possibile eseguirlo, a meno che non esista un'apposita autorizzazione dell'amministratore. Il processo di verifica determina se il codice può tentare di accedere a indirizzi di memoria non validi o eseguire operazioni che potrebbero compromettere il corretto funzionamento del processo in cui è in esecuzione. Il codice che supera la verifica viene definito come indipendente dai tipi. La possibilità di verificare che il codice sia indipendente dai tipi consente a Common Language Runtime di fornire un livello di isolamento corrispondente ai limiti del processo, con un'incidenza sulle prestazioni di gran lunga inferiore.

I domini applicazione forniscono un'unità di elaborazione più protetta e versatile che può essere utilizzata da Common Language Runtime per fornire isolamento tra le applicazioni. In ogni processo è possibile eseguire più domini applicazione con lo stesso livello di isolamento che si ottiene utilizzando processi separati, ma senza l'overhead derivante dalle chiamate tra processi o dal passaggio tra processi. La possibilità di eseguire più applicazioni all'interno di un singolo processo incrementa considerevolmente la scalabilità.

L'isolamento delle applicazioni è importante anche per la sicurezza delle applicazioni stesse. È possibile, ad esempio, eseguire controlli da diverse applicazioni Web in esecuzione in un singolo processo browser, in modo che i controlli non possano accedere alle risorse e ai dati reciproci.

L'isolamento fornito dai domini applicazione offre i seguenti vantaggi:

  • Gli errori di un'applicazione non possono influire sulle altre applicazioni. Poiché il codice indipendente dai tipi non può provocare errori di memoria, l'utilizzo dei domini applicazione assicura che il codice in esecuzione in un dominio non possa influire sulle altre applicazioni nel processo.

  • È possibile arrestare singole applicazioni senza arrestare l'intero processo. L'utilizzo dei domini applicazione consente di scaricare il codice in esecuzione in una specifica applicazione.

    NotaNota

    Non è possibile scaricare singoli assembly o tipi.È possibile scaricare solo un dominio completo.

  • Il codice in esecuzione in un'applicazione non può accedere direttamente al codice o alle risorse di un'altra applicazione. Common Language Runtime assicura tale isolamento impedendo le chiamate dirette tra gli oggetti appartenenti a domini applicazione diversi. Il passaggio di un oggetto da un dominio all'altro avviene tramite copia o utilizzando un proxy. Se l'oggetto viene copiato, la chiamata all'oggetto è locale. In altre parole, sia l'oggetto a cui viene fatto riferimento che il chiamante si trovano nello stesso dominio applicazione. Se si accede all'oggetto tramite un proxy, la chiamata all'oggetto è remota. In questo caso, l'oggetto a cui viene fatto riferimento e il chiamante si trovano in domini applicazione diversi. Le chiamate tra domini utilizzano la stessa infrastruttura di chiamata remota delle chiamate tra due processi o tra due computer. I metadati relativi all'oggetto a cui viene fatto riferimento devono essere pertanto disponibili per entrambi i domini applicazione, affinché il compilatore JIT possa compilare la chiamata in modo corretto. Se il dominio chiamante non ha accesso ai metadati per l'oggetto chiamato, la compilazione potrebbe avere esito negativo, con un'eccezione di tipo System.IO.FileNotFound. Per ulteriori informazioni, vedere Remote Objects. Il meccanismo che stabilisce in che modo è possibile accedere a un oggetto da un dominio diverso è determinato dall'oggetto. Per ulteriori informazioni, vedere Classe MarshalByRefObject.

  • L'ambito del comportamento del codice viene stabilito dall'applicazione in cui questo è in esecuzione. In altri termini, il dominio applicazione fornisce impostazioni di configurazione quali i criteri di controllo delle versioni dell'applicazione, la posizione degli assembly remoti a cui questa accede e le informazioni sul percorso degli assembly che vengono caricati nel dominio.

  • Le autorizzazioni concesse al codice possono essere controllate dal dominio applicazione in cui il codice è in esecuzione.

Torna all'inizio

Argomenti correlati

Titolo

Descrizione

Domini applicazione e assembly

Viene illustrata la relazione tra i domini applicazione e gli assembly.

Domini applicazione e thread

Viene illustrata la relazione tra i domini applicazione e i thread del sistema operativo.

Programmazione con i domini applicazione

Viene illustrato come programmare utilizzando i domini applicazione.

Cenni preliminari sull'hosting

Viene illustrato come creare e configurare i domini applicazione.

Host di runtime

Viene illustrato come utilizzare un host di runtime.

Torna all'inizio

Riferimenti

System.MarshalByRefObject

Torna all'inizio