Usare Visual C# per creare un server remoto
Questo articolo consente di creare un server remoto a cui un'altra applicazione può accedere tramite Visual C#.
Versione originale del prodotto: Oggetto visivo 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 comunica il client e l'applicazione server viene usata per registrare l'oggetto server con il framework di runtime .NET Remoting.
Questo articolo fa riferimento agli spazi dei nomi della libreria di classi di Microsoft .NET Framework seguenti:
System.Runtime.Remoting
System.Runtime.Remoting.Channels
System.Runtime.Remoting.Channels.Tcp
Requisiti
Questo articolo presuppone che si 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 nella creazione dell'applicazione server consiste nel creare un oggetto server. L'oggetto server è quello con cui l'applicazione client crea un'istanza e comunica nel computer server. L'applicazione client esegue questa operazione tramite un oggetto proxy creato nel client. In questo esempio l'oggetto server si trova 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. Class1 viene creato per impostazione predefinita.
In Esplora soluzioni rinominare il file di codice Class1.csin ServerClass.cs.
Aprire ServerClass.cs e rinominare Class1in myRemoteClass. È anche necessario rinominare il costruttore predefinito per la classe in in modo che corrisponda al nome della classe. myRemoteClass deve ereditare dalla
MarshalByRefObject
classe . 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 nella 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 remota
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 affinché i client si connettono 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 è che è 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. Class1 viene creato per impostazione predefinita.
In Esplora soluzioni rinominare il file Class1.csin RemoteServer.cs.
Aggiungere un riferimento allo spazio dei
System.Runtime.Remoting
nomi .Aggiungere un riferimento all'assembly ServerClass.dll creato nella sezione precedente.
Usare l'istruzione
using
negliRemoting
spazi dei nomi ,Remoting.Channels
eRemoting.Channels.TCP
in modo che non sia necessario qualificare le dichiarazioni in tali spazi dei nomi più avanti nel codice. È necessario usare l'istruzioneusing
prima 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
TcpChannel
oggetto in attesa che i client si connettono su una determinata porta, ovvero la porta 8085 in questo esempio. Usare ilRegisterChannel
metodo per registrare il canale con i servizi del canale. Aggiungere il codice di dichiarazione seguente nellaMain
procedura diClass1
:TcpChannel chan = new TcpChannel(8085); ChannelServices.RegisterChannel(chan);
Chiamare il
RegisterWellKnownType
metodo dell'oggettoRemotingConfiguration
per registrare l'oggettoServerClass
con 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 .
Utilizzare la
SingleCall
modalità oggetto per specificare il parametro finale. La modalità oggetto specifica la durata dell'oggetto quando viene attivato nel server. Nel caso degliSingleCall
oggetti , viene creata una nuova istanza della classe per ogni chiamata effettuata da un client, anche se lo stesso client chiama lo stesso metodo più di una volta. D'altra parte,Singleton
gli 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
ReadLine
metodo dell'oggettoConsole
per mantenere in esecuzione l'applicazione server.System.Console.WriteLine("Hit <enter> to exit..."); System.Console.ReadLine();
Compilare 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.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per