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.

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

NotaNota

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

Caricamento di Common Language Runtime in un processo

Viene descritto come caricare il runtime in un processo, inizializzarlo e impostare i valori per determinarne il comportamento.

Scaricamento di domini e arresto di un processo

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.

Caricamento ed esecuzione di codice utente

Viene descritto come caricare ed eseguire codice utente.

Creazione e configurazione di domini applicazione

Viene descritto come creare e configurare domini applicazione in cui eseguire codice utente.

Determinazione dei limiti del dominio applicazione

Viene descritto come determinare dove impostare i limiti del dominio di una nuova applicazione.

Transizione al codice di hosting gestito

Viene descritto come eseguire la transizione dal codice non gestito per eseguire codice host e utente gestito.

File di configurazione di attivazione

Descrive come attivare una versione del runtime diversa da quella specificata nel file di configurazione dell'applicazione.

Host di runtime

Vengono descritti gli host forniti con .NET Framework.

Domini applicazione

Vengono descritti i costrutti che gli host utilizzano per isolare il codice in esecuzione all'interno di un processo.

Esecuzione affiancata di diverse versioni

Viene descritta l'esecuzione di più versioni di un'applicazione, di un componente o del runtime.

Interfacce di hosting per .NET Framework 4

Vengono descritte le interfacce non gestite per l'hosting del runtime in .NET Framework 4.

Interfacce di hosting per .NET Framework 2.0

Vengono descritte le interfacce non gestite per l'hosting del runtime in .NET Framework 2.0.

Torna all'inizio

Riferimenti

System.AppDomainManager

Torna all'inizio