Architettura di .NET Framework Remoting

L'infrastruttura di .NET Remoting fornisce un approccio astratto alla comunicazione tra processi. Gli oggetti che possono essere passati per valore, o copiati, vengono passati automaticamente tra applicazioni in diversi domini applicazione o computer. Perché questa operazione sia possibile, contrassegnare le classi personalizzate come serializzabili.

La vera forza del sistema .NET Remoting, tuttavia, risiede nella possibilità di abilitare la comunicazione tra oggetti in diversi domini applicazione o processi utilizzando diversi protocolli di trasporto, formati di serializzazione, schemi di durata degli oggetti e modalità di creazione di oggetti. La comunicazione remota rende inoltre possibile intervenire quasi in qualsiasi fase del processo di comunicazione.

Se si è implementato un numero di applicazioni distribuite o si è interessati a spostare componenti negli altri computer per aumentare la scalabilità del programma, sarà più facile considerare il sistema .NET Remoting come un sistema generico di comunicazione tra processi con alcune implementazioni predefinite che gestiscono facilmente la maggior parte delle situazioni. La discussione seguente inizia con le nozioni di base sulla comunicazione tra processi utilizzando .NET Remoting.

Confronto tra copie e riferimenti

La comunicazione tra processi richiede un oggetto server la cui funzionalità viene fornita ai chiamanti all'esterno del processo, un client che effettua chiamate sull'oggetto server e un meccanismo di trasporto per portare le chiamate da un punto all'altro. Gli indirizzi dei metodi server sono logici e funzionano correttamente in un processo, ma non funzionano in un diverso processo client. Per ovviare a questo problema un client può chiamare un oggetto server facendo una copia dell'oggetto nella sua interezza e spostandolo nel processo client, dove i metodi della copia possono essere chiamati direttamente.

Molti oggetti, tuttavia, non possono o non devono essere copiati e spostati in qualche altro processo per l'esecuzione. Oggetti estremamente grandi con molti metodi non devono essere copiati o passati per valore ad altri processi. Generalmente un client necessita solo delle informazioni restituite da uno o da alcuni metodi sull'oggetto server. Effettuare una copia dell'oggetto server nella sua interezza, incluse anche eventuali informazioni interne o strutture eseguibili non corrispondenti ai requisiti del client, sarebbe uno spreco di larghezza di banda così come di memoria del client e di tempo di elaborazione. Molti oggetti, inoltre, espongono funzionalità pubblica, ma richiedono dati privati per l'esecuzione interna. La copia di questi oggetti potrebbe consentire a client non autorizzati di esaminare dati interni, rischiando di generare problemi di protezione. Alcuni oggetti, infine, utilizzano dati che non possono essere copiati in nessun modo. Un oggetto FileInfo, ad esempio, contiene un riferimento a un file del sistema operativo che ha un indirizzo univoco nella memoria del processo server. È possibile copiare questo indirizzo, ma non sarà valido in un altro processo.

In queste situazioni, il processo server deve passare al processo client un riferimento all'oggetto server, piuttosto che una copia dell'oggetto. I client possono utilizzare questo riferimento per chiamare l'oggetto server. Queste chiamate non vengono eseguite nel processo client. Il sistema .NET Remoting, invece, raccoglie tutte le informazioni sulla chiamata e le invia al processo server, dove la chiamata viene interpretata, l'oggetto server corrispondente viene trovato e viene effettuata la chiamata all'oggetto server per conto dell'oggetto client. Il risultato della chiamata viene quindi rispedito al processo client da restituire al client. La larghezza di banda viene utilizzata solo per le informazioni critiche: la chiamata, gli argomenti della chiamata e qualsiasi valore restituito o eccezione.

Architettura .NET Remoting semplificata

Utilizzare riferimenti a oggetti per far comunicare oggetti server e client è il cuore di .NET Remoting. L'architettura .NET Remoting, tuttavia, fornisce al programmatore una procedura più semplice. Se si configura correttamente il client, è possibile creare una nuova istanza dell'oggetto remoto utilizzando new (o la funzione di creazione di istanza del linguaggio di programmazione gestito). Il client riceve un riferimento all'oggetto server ed è quindi possibile chiamarne i metodi come se l'oggetto fosse nel proprio processo piuttosto che in esecuzione su un computer distinto. Il sistema .NET Remoting utilizza oggetti proxy per dare l'impressione che l'oggetto server si trovi nel processo del client. I proxy sono oggetti che si presentano come qualche altro oggetto. Quando il client crea un'istanza del tipo remoto, l'infrastruttura .NET Remoting crea un oggetto proxy identico al tipo remoto. Il client chiama un metodo su quel proxy e il sistema .NET Remoting riceve la chiamata, la indirizza al processo server, richiama l'oggetto server e ritorna il valore restituito al proxy client che ritorna il risultato al client.

Le chiamate remote devono essere comunicate in qualche modo tra il client e il processo server. Se si intende creare un sistema .NET Remoting per conto proprio, sarà consigliabile iniziare imparando la programmazione di rete e un buon numero di protocolli e di specifiche di formati di serializzazione. Nel sistema .NET Remoting, la combinazione di tecnologie sottostanti necessaria per aprire una connessione di rete e utilizzare un particolare protocollo per inviare i byte all'applicazione ricevente è rappresentata come un canale di trasporto.

Un canale è un tipo che prende un flusso di dati, crea un pacchetto secondo un particolare protocollo di rete e invia il pacchetto a un altro computer. Alcuni canali possono solo ricevere informazioni, altri possono solo inviare informazioni e altri ancora, ad esempio le classi predefinite TcpChannel e HttpChannel, possono essere utilizzati in entrambe le direzioni.

Anche se il processo server conosce tutto di ogni tipo univoco, il client sa solo che vuole un riferimento a un oggetto in un altro dominio applicazione, forse in un altro computer. Dal mondo esterno al dominio di applicazione del server, un URL trova l'oggetto. Gli URL che rappresentano tipi univoci al mondo esterno sono URL di attivazione, che assicurano che la chiamata remota venga effettuata al tipo corretto. Per ulteriori informazioni, vedere URL di attivazione.

Progettazione completa di un sistema .NET Remoting

Si supponga di avere un'applicazione in esecuzione su un computer, e di voler utilizzare la funzionalità esposta da un tipo archiviato in un altro computer. Nell'illustrazione seguente è descritto il generale processo .NET remoting.

Processo .NET Remoting

Architettura dei servizi remoti .NET

Se entrambi i membri della relazione sono configurati correttamente, un client non fa altro che creare una nuova istanza della classe server. Il sistema .NET Remoting crea un oggetto proxy che rappresenta la classe e restituisce all'oggetto client un riferimento al proxy. Quando un client chiama un metodo, l'infrastruttura .NET Remoting gestisce la chiamata, controlla le informazioni sul tipo e invia la chiamata sul canale al processo server. Un canale in attesa raccoglie la richiesta e la inoltra al sistema .NET Remoting del server che trova (o crea, se necessario) e chiama l'oggetto richiesto. Il processo viene quindi invertito: il sistema .NET Remoting del server impacchetta la risposta in un messaggio che il canale server invia al canale client. Il sistema .NET Remoting del client, infine restituisce il risultato della chiamata all'oggetto client tramite il proxy.

Il codice effettivo necessario a compiere questa operazione è molto breve, ma la progettazione e la configurazione della relazione vanno affrontate con attenzione. Il codice potrebbe essere corretto e non funzionare ugualmente a causa di un URL o numero di porta errato. Per ulteriori informazioni, vedere Configurazione.

Sebbene questa panoramica generale del processo di .NET Remoting possa apparire abbastanza chiara, i dettagli di basso livello possono essere piuttosto complessi. In altri argomenti sono presenti approfondimenti sugli elementi principali di .NET Remoting, come elencato nella sezione Vedere anche seguente.

Vedere anche

Concetti

Limiti: Domini applicazioni e processi
Oggetti utilizzabili e non utilizzabili in remoto
Canali
Sicurezza in .NET Remoting
Configurazione di applicazioni remote

Altre risorse

Panoramica di .NET Framework Remoting
Attivazione e durate degli oggetti

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.