Condividi tramite


Cenni preliminari sull'hosting

Aggiornamento: novembre 2007

.NET Framework versione 2.0 consente alle applicazioni che ospitano Common Language Runtime (CLR) 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.

Inizializzazione e avvio di un runtime ospitato

Come con le versioni precedenti, il runtime viene inizializzato dalla funzione CorBindToRuntimeEx. È possibile scegliere quale versione del runtime caricare, ma un processo può ospitare solo una versione. Se viene caricata la versione 2.0, la funzione restituirà l'interfaccia ICLRRuntimeHost, utilizzata per avviare il runtime ed eseguire il codice gestito.

Nota:

Nelle versioni precedenti viene restituita 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.

Interfacce di gestione dell'hosting

In .NET Framework versione 2.0 CLR fornisce interfacce di gestione dell'hosting per controllare molte funzionalità del runtime ospitato, consente all'applicazione host di implementare altre interfacce di gestione fornite dal runtime e consente 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.

IHostAssemblyManager

IHostAssemblyStore

ICLRAssemblyReferenceList

ICLRAssemblyIdentityManager

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.

ICLRPolicyManager

IHostPolicyManager

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.

ICLRHostProtectionManager

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.

IHostMemoryManager

IHostMAlloc

ICLRMemoryNotificationCallback

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.

IHostGCManager

ICLRGCManager

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.

ICLRDebugManager

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.

ICLROnEventManager

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.

IHostTaskManager

ICLRTaskManager

IHostTask

ICLRTask

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.

IHostThreadPoolManager

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.

IHostSyncManager

ICLRSyncManager

IHostCrst

IHostManualEvent

IHostAutoEvent

IHostSemaphore

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.

IHostIoCompletionManager

Nota:

Le interfacce di hosting per le versioni precedenti del runtime sono illustrate in Interfacce di hosting per .NET Framework 1.0 e 1.1.

Gestori dei domini applicazione

Per i programmi che ospitano CLR, i domini dell'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 applicazione, .NET Framework versione 2.0 fornisce la classe AppDomainManager come classe base da cui è possibile derivare i propri gestori dei domini applicazione. 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 applicazione, dando la possibilità di configurarli. Fornisce inoltre un host non gestito in grado di chiamare codice gestito.

Vedere anche

Concetti

Caricamento di Common Language Runtime in un processo

Riferimenti

AppDomainManager

Altre risorse

Hosting di Common Language Runtime

Domini applicazione

Interfacce di hosting per .NET Framework 2.0 e versioni successive