Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come creare un server remoto a cui un'altra applicazione può accedere usando Visual C#.
Versione originale del prodotto: Visual C#
Numero KB originale: 307445
Riepilogo
Questo articolo illustra come creare un server remoto a cui un'altra applicazione può accedere. L'applicazione che accede a questo server può trovarsi nello stesso computer, in un computer diverso o in una rete diversa. Il server remoto è suddiviso in due parti: l'oggetto server e l'applicazione server. L'oggetto server è l'oggetto con cui il client comunica e l'applicazione server viene usata per registrare l'oggetto server con il framework di runtime della comunicazione remota .NET.
Questo articolo fa riferimento agli spazi dei nomi della libreria di classi microsoft .NET Framework seguenti:
System.Runtime.RemotingSystem.Runtime.Remoting.ChannelsSystem.Runtime.Remoting.Channels.Tcp
Requisiti
Questo articolo presuppone che l'utente abbia familiarità con gli argomenti seguenti:
- Visual Studio .NET o Visual Studio
- Visual C# .NET o Visual C#
- Rete
Creazione dell'oggetto server remoto
Il primo passaggio per la creazione dell'applicazione server consiste nel creare un oggetto server. L'oggetto server è ciò che l'applicazione client crea un'istanza e comunica con nel computer server. L'applicazione client esegue questa operazione tramite un oggetto proxy creato nel client. In questo esempio l'oggetto server risiede in una libreria di classi (DLL) ed è denominato myRemoteClass.
Creare una nuova applicazione libreria di classi in Visual C# .NET. Assegnare al progetto il nome ServerClass. La classe 1 viene creata per impostazione predefinita.
In Esplora soluzioni rinominare il file di codice Class1.cs in ServerClass.cs.
Aprire ServerClass.cs e rinominare Class1 in myRemoteClass. È anche necessario rinominare il costruttore predefinito per la classe in in modo che corrisponda al nome della classe. myRemoteClass deve ereditare dalla
MarshalByRefObjectclasse . La classe dovrebbe ora essere visualizzata come segue:public class myRemoteClass: MarshalByRefObject { public myRemoteClass() { // TO DO: Add constructor logic here. } }Aggiungere un metodo pubblico a myRemoteClass che accetta una stringa, visualizza un messaggio alla console con un valore della stringa e restituisce True se la stringa non è vuota.
public bool SetString(String sTemp) { try { Console.WriteLine("This string '{0}' has a length of {1}", sTemp, sTemp.Length); return sTemp != ""; } catch { return false; } }Compilare il progetto per creare l'assembly ServerClass.dll .
Salvare e chiudere il progetto.
Creare l'applicazione server remoto
Dopo aver creato l'oggetto server con cui il client comunicherà, è necessario registrare questo oggetto con il framework remoting. Quando si registra l'oggetto, è anche necessario avviare il server e fare in modo che il server sia in ascolto su una porta per consentire ai client di connettersi a tale porta. A tale scopo, è necessario un tipo di progetto che restituisce un file eseguibile.
Il motivo per includere l'oggetto server in un progetto separato è in modo che sia possibile fare facilmente riferimento all'oggetto server dal progetto client. Se lo si include in questo progetto non è possibile farvi riferimento, perché i riferimenti possono essere impostati solo su file DLL.
Creare una nuova applicazione console in Visual C# .NET per avviare il server remoto. La classe 1 viene creata per impostazione predefinita.
In Esplora soluzioni rinominare il file di Class1.cs in RemoteServer.cs.
Aggiungere un riferimento allo spazio dei
System.Runtime.Remotingnomi .Aggiungere un riferimento all'assembly ServerClass.dll creato nella sezione precedente.
Usare l'istruzione
usingnegli spazi deiRemotingnomi ,Remoting.ChannelseRemoting.Channels.TCPin modo che non sia necessario qualificare le dichiarazioni in tali spazi dei nomi in un secondo momento nel codice. È necessario usare l'istruzioneusingprima di qualsiasi altra dichiarazione.using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp;Dichiarare la variabile appropriata. Dichiarare e inizializzare un
TcpChanneloggetto in ascolto della connessione dei client su una determinata porta, ovvero la porta 8085 in questo esempio. Usare ilRegisterChannelmetodo per registrare il canale con i servizi del canale. Aggiungere il codice di dichiarazione seguente nellaMainprocedura diClass1:TcpChannel chan = new TcpChannel(8085); ChannelServices.RegisterChannel(chan);Chiamare il
RegisterWellKnownTypemetodo dell'oggettoRemotingConfigurationper registrare l'oggettoServerClasscon il framework remoting e specificare i parametri seguenti:Nome completo del tipo dell'oggetto registrato (ovvero ServerClass.myRemoteClass in questo esempio), seguito dal nome dell'assembly ServerClass. Specificare sia il nome dello spazio dei nomi che il nome della classe qui. Poiché non è stato specificato uno spazio dei nomi nella sezione precedente, viene usato lo spazio dei nomi radice predefinito.
Assegnare un nome all'endpoint in cui l'oggetto deve essere pubblicato come RemoteTest. I client devono conoscere questo nome per connettersi all'oggetto .
Usare la
SingleCallmodalità oggetto per specificare il parametro finale. La modalità oggetto specifica la durata dell'oggetto quando viene attivata nel server. Nel caso degliSingleCalloggetti, viene creata una nuova istanza della classe per ogni chiamata eseguita da un client, anche se lo stesso client chiama lo stesso metodo più di una volta. D'altra parte,Singletongli oggetti vengono creati una sola volta e tutti i client comunicano con lo stesso oggetto.RemotingConfiguration.RegisterWellKnownServiceType( System.Type.GetType("ServerClass.myRemoteClass, ServerClass"), "RemoteTest", WellKnownObjectMode.SingleCall);
Utilizzare il
ReadLinemetodo dell'oggettoConsoleper mantenere l'applicazione server in esecuzione.System.Console.WriteLine("Hit <enter> to exit..."); System.Console.ReadLine();Crea il progetto.
Salvare e chiudere il progetto.
Riferimenti
Per una panoramica della comunicazione remota .NET, vedere la documentazione della Guida per sviluppatori di .NET Framework.