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.

  1. Creare una nuova applicazione libreria di classi in Visual C# .NET. Assegnare al progetto il nome ServerClass. Class1 viene creato per impostazione predefinita.

  2. In Esplora soluzioni rinominare il file di codice Class1.csin ServerClass.cs.

  3. 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.
        }
    }
    
  4. 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;
         }
    }
    
  5. Compilare il progetto per creare l'assembly ServerClass.dll .

  6. 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.

  1. Creare una nuova applicazione console in Visual C# .NET per avviare il server remoto. Class1 viene creato per impostazione predefinita.

  2. In Esplora soluzioni rinominare il file Class1.csin RemoteServer.cs.

  3. Aggiungere un riferimento allo spazio dei System.Runtime.Remoting nomi .

  4. Aggiungere un riferimento all'assembly ServerClass.dll creato nella sezione precedente.

  5. Usare l'istruzione using negli Remotingspazi dei nomi , Remoting.Channelse Remoting.Channels.TCP in modo che non sia necessario qualificare le dichiarazioni in tali spazi dei nomi più avanti nel codice. È necessario usare l'istruzione using prima di qualsiasi altra dichiarazione.

    using System.Runtime.Remoting;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;
    
  6. 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 il RegisterChannel metodo per registrare il canale con i servizi del canale. Aggiungere il codice di dichiarazione seguente nella Main procedura di Class1:

    TcpChannel chan = new TcpChannel(8085);
    ChannelServices.RegisterChannel(chan);
    
  7. Chiamare il RegisterWellKnownType metodo dell'oggetto RemotingConfiguration per registrare l'oggetto ServerClass 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 degli SingleCall 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);
      
  8. Utilizzare il ReadLine metodo dell'oggetto Console per mantenere in esecuzione l'applicazione server.

    System.Console.WriteLine("Hit <enter> to exit...");
    System.Console.ReadLine();
    
  9. Compilare il progetto.

  10. Salvare e chiudere il progetto.

Riferimenti

Per una panoramica della comunicazione remota .NET, vedere la documentazione della Guida per sviluppatori di .NET Framework.