Cenni preliminari sull'hosting
Le applicazioni di .NET Framework ospitano automaticamente il runtime con cui sono state compilate. Se si compila il codice gestito come assembly con estensione exe, il runtime verrà avviato automaticamente da mscoree.dll al momento dell'esecuzione dell'assembly exe. Anche le applicazioni non gestite possono trarre vantaggio dall'hosting del runtime. Il runtime fornisce un framework per estendere applicazioni quali Internet Information Services (IIS) e SQL Server 2005.
Sia che venga richiamata automaticamente, come nel caso degli assembly exe gestiti, o caricata tramite l'API di hosting non gestita, un'applicazione .NET Framework richiede una sezione di codice chiamata host di runtime. L'host di runtime carica il runtime in un processo, crea i domini applicazione all'interno di tale processo e carica ed esegue il codice utente all'interno dei domini applicazione.
La versione 2.0 di .NET Framework consente alle applicazioni che ospitano il runtime di controllare molte funzionalità del runtime. È possibile sostituire alcune funzionalità, ad esempio l'allocazione della memoria e il caricamento degli assembly, con implementazioni personalizzate. È possibile controllare il comportamento di altre funzionalità, ricevere notifiche di eventi nel runtime e gestire domini applicazione.
.NET Framework versione 4 consolida molte delle API di hosting di .NET Framework 2.0. Inoltre, .NET Framework 4 supporta l'attivazione dell'host di runtime affiancato in-process e fornisce altri miglioramenti.
La panoramica include le sezioni seguenti:
Inizializzazione e avvio di un runtime ospitato
Interfacce di gestione dell'hosting per .NET Framework 2.0
Interfacce di gestione dell'hosting per .NET Framework 4
Gestori dei domini applicazione
Argomenti correlati
Riferimenti
Inizializzazione e avvio di un runtime ospitato
L'API di hosting di .NET Framework 4 fornisce la funzione CLRCreateInstance che può restituire l'interfaccia ICLRMetaHost. È quindi possibile chiamare il metodo GetRuntime su questa interfaccia per ottenere un'interfaccia ICLRRuntimeInfo specifica in base a una determinata versione di CLR. Questa procedura sostituisce il metodo CorBindToRuntimeEx utilizzato dall'API di hosting di .NET Framework 2.0.
L'API di hosting di .NET Framework 2.0 fornisce la funzione CorBindToRuntimeEx per inizializzare il runtime. È possibile scegliere quale versione del runtime caricare, ma un processo può ospitare solo una versione. Se viene caricata la versione 2.0, 3.0, o 3.5, la funzione restituirà l'interfaccia ICLRRuntimeHost, che viene utilizzata per avviare il runtime ed eseguire il codice gestito.
L'API di hosting di .NET Framework 1 fornisce l'interfaccia ICorRuntimeHost.
L'avvio del runtime è illustrato in Caricamento di Common Language Runtime in un processo, mentre l'esecuzione del codice gestito è illustrata in Transizione al codice di hosting gestito.
Torna all'inizio
Interfacce di gestione dell'hosting per .NET Framework 2.0
In .NET Framework 2.0, CLR fornisce interfacce di gestione dell'hosting per controllare molte funzionalità del runtime ospitato. Inoltre, consente all'applicazione host di implementare altre interfacce di gestione fornite dal runtime nonché di implementare interfacce di gestione dell'hosting personalizzate.
Dal punto di vista dell'individuazione, le interfacce di gestione possono essere suddivise in due categorie principali:
Interfacce di gestione implementate dall'host e individuate dal runtime tramite l'interfaccia IHostControl.
Interfacce di gestione fornite da CLR e individuate dall'host tramite l'interfaccia ICLRControl.
Nella tabella riportata di seguito le interfacce sono raggruppate in base al tipo di funzionalità fornita. Per prima è indicata l'interfaccia più importante all'interno di ogni gruppo.
Gruppo |
Funzione |
Interfacce |
---|---|---|
Gestione del caricamento degli assembly |
Consente all'host di personalizzare i percorsi da cui vengono caricati gli assembly, la modalità di gestione delle versioni e i formati da cui possono essere caricati gli assembly. Gli assembly ad esempio potrebbero essere caricati da un database anziché dai file sul disco rigido. CLR utilizza l'interfaccia IHostControl per individuare se un host implementa questo gruppo di interfacce. |
|
Gestione dei criteri |
Consente all'host di specificare la modalità di gestione degli errori di programma in modo da supportare requisiti di affidabilità diversi. L'host utilizza l'interfaccia ICLRControl per avere accesso al gestore di runtime e implementa i callback di IHostPolicyManager per le notifiche degli errori provenienti dal runtime. |
|
Gestione della protezione host |
Consente all'host di applicare il proprio modello di programmazione, impedendo l'utilizzo di determinati tipi o membri. L'host ad esempio può impedire l'utilizzo di primitive di threading o di sincronizzazione. L'host utilizza l'interfaccia ICLRControl per avere accesso al gestore di runtime. |
|
Gestione della memoria |
Consente all'host di controllare l'allocazione della memoria fornendo sostituzioni per le funzioni del sistema operativo utilizzate da CLR per allocare memoria. CLR utilizza l'interfaccia IHostControl per individuare se un host implementa questo gruppo di interfacce. |
|
Gestione del Garbage Collection |
Consente all'host di implementare metodi per ricevere notifica dell'inizio e della fine del Garbage Collection. Consente all'host di avviare raccolte, raccogliere statistiche e specificare alcune caratteristiche di raccolta. L'host utilizza l'interfaccia ICLRControl per avere accesso al gestore di runtime. CLR utilizza l'interfaccia IHostControl per individuare se un host implementa questo gruppo di interfacce. |
|
Gestione del debug |
Consente all'host di individuare se è associato un debugger, di fornire informazioni di debug aggiuntive e di personalizzare le attività di debug. L'host utilizza l'interfaccia ICLRControl per avere accesso al gestore di runtime. |
|
Gestione degli eventi CLR |
Consente a un host di registrarsi per la notifica degli eventi enumerati da EClrEvent. L'host utilizza l'interfaccia ICLRControl per avere accesso al gestore di runtime e implementa i relativi gestori dell'evento tramite l'interfaccia IActionOnCLREvent. |
|
Gestione delle attività |
Consente all'host di ricevere una notifica ogni volta che un thread effettua una transizione fra codice gestito e non gestito. Consente all'host di controllare l'affinità di thread, nonché l'avvio, l'arresto e la modalità di pianificazione delle attività. CLR utilizza l'interfaccia IHostControl per individuare se un host implementa questo gruppo di interfacce. |
|
Gestione del pool di thread |
Consente all'host di implementare il proprio pool di thread per il runtime da utilizzare. CLR utilizza l'interfaccia IHostControl per individuare se un host implementa questo gruppo di interfacce. |
|
Gestione della sincronizzazione |
Consente all'host di implementare le proprie primitive di sincronizzazione per il runtime da utilizzare. L'host può fornire eventi, sezioni critiche e semafori. CLR utilizza l'interfaccia IHostControl per individuare se un host implementa questo gruppo di interfacce. |
|
Gestione del completamento I/O |
Consente all'host di implementare la propria implementazione dell'input/output asincrono. CLR utilizza l'interfaccia IHostControl per individuare se un host implementa questo gruppo di interfacce. |
Nota |
---|
Le interfacce di hosting per le versioni precedenti del runtime sono illustrate in Interfacce di hosting di .NET Framework 1.0 e 1.1. |
Torna all'inizio
Interfacce di gestione dell'hosting per .NET Framework 4
.NET Framework 4 consolida l'API di hosting della versione 2.0 nelle interfacce riportate di seguito.
ICLRMetaHost fornisce metodi che restituiscono una versione specifica di CLR, elencano tutti i runtime installati e in-process, restituiscono l'interfaccia di attivazione e individuano la versione CLR utilizzata per compilare un assembly.
ICLRMetaHostPolicy fornisce il metodo GetRequestedRuntime che offre un'interfaccia CLR in base a criteri, all'assembly gestito, alla versione e al file di configurazione.
ICLRRuntimeInfo fornisce metodi che restituiscono informazioni su un runtime specifico, compresi versione, directory e stato di caricamento.
ICLRStrongName raggruppa in una sola interfaccia tutte le funzioni statiche globali di denominazione sicura di CLR 2.0 esportate da MSCorEE.dll (tranne StrongNameErrorInfo). Tutti i metodi ICLRStrongName restituiscono HRESULT COM standard.
Queste interfacce incapsulano e sostituiscono le interfacce di hosting di .NET Framework 2.0.
Torna all'inizio
Gestori dei domini applicazione
Per i programmi che ospitano il runtime, i domini di applicazione garantiscono una maggiore affidabilità isolando gli assembly l'uno dall'altro. Gli assembly possono essere scaricati dal processo scaricando i domini applicazione.
Per gestire più domini di applicazione, .NET Framework fornisce la classe AppDomainManager come classe di base da cui è possibile derivare gestori di domini di applicazione personalizzati. Il gestore dei domini applicazione che si progetta per l'applicazione host è essenzialmente un'estensione dell'host, in codice gestito. Viene caricato automaticamente in ogni dominio applicazione creato nel processo.
Il gestore dei domini applicazione può migliorare le prestazioni eliminando alcune transizioni fra codice gestito e non gestito. Può ricevere notifica della creazione di nuovi domini di applicazione, dando la possibilità di configurarli. Il gestore di domini di applicazione fornisce inoltre un modo per consentire a un host non gestito di chiamare codice gestito.
Torna all'inizio
Argomenti correlati
Titolo |
Descrizione |
---|---|
Viene descritto come caricare il runtime in un processo, inizializzarlo e impostare i valori per determinarne il comportamento. |
|
Viene descritto come scaricare i domini applicazione e come arrestare un processo. |
|
Impostazione di principali e criteri della sicurezza basata sui ruoli |
Viene descritto come impostare i criteri di sicurezza basata sui ruoli. |
Impostazione dei criteri di sicurezza a livello di dominio applicazione |
Viene descritto come impostare i criteri di sicurezza a livello di dominio applicazione. |
Viene descritto come caricare ed eseguire codice utente. |
|
Viene descritto come creare e configurare domini applicazione in cui eseguire codice utente. |
|
Viene descritto come determinare dove impostare i limiti del dominio di una nuova applicazione. |
|
Viene descritto come eseguire la transizione dal codice non gestito per eseguire codice host e utente gestito. |
|
Descrive come attivare una versione del runtime diversa da quella specificata nel file di configurazione dell'applicazione. |
|
Vengono descritti gli host forniti con .NET Framework. |
|
Vengono descritti i costrutti che gli host utilizzano per isolare il codice in esecuzione all'interno di un processo. |
|
Viene descritta l'esecuzione di più versioni di un'applicazione, di un componente o del runtime. |
|
Vengono descritte le interfacce non gestite per l'hosting del runtime in .NET Framework 4. |
|
Vengono descritte le interfacce non gestite per l'hosting del runtime in .NET Framework 2.0. |
Torna all'inizio
Riferimenti
Torna all'inizio