Verwenden von Visual C# zum Erstellen eines Remoteservers

In diesem Artikel erfahren Sie, wie Sie einen Remoteserver erstellen, auf den eine andere Anwendung mithilfe von Visual C# zugreifen kann.

Ursprüngliche Produktversion: Visual C#
Ursprüngliche KB-Nummer: 307445

Zusammenfassung

In diesem Artikel wird veranschaulicht, wie Sie einen Remoteserver erstellen, auf den eine andere Anwendung zugreifen kann. Die Anwendung, die auf diesen Server zugreift, kann sich auf demselben Computer, auf einem anderen Computer oder in einem anderen Netzwerk befinden. Der Remoteserver ist in zwei Teile unterteilt: das Serverobjekt und die Serveranwendung. Das Serverobjekt ist das Objekt, mit dem der Client kommuniziert, und die Serveranwendung wird verwendet, um das Serverobjekt beim .NET Remoting-Laufzeitframework zu registrieren.

Dieser Artikel bezieht sich auf die folgenden Namespaces der Microsoft .NET Framework-Klassenbibliothek:

  • System.Runtime.Remoting
  • System.Runtime.Remoting.Channels
  • System.Runtime.Remoting.Channels.Tcp

Anforderungen

In diesem Artikel wird davon ausgegangen, dass Sie mit den folgenden Themen vertraut sind:

  • Visual Studio .NET oder Visual Studio
  • Visual C# .NET oder Visual C#
  • Netzwerk

Erstellen des Remoteserverobjekts

Der erste Schritt beim Erstellen der Serveranwendung besteht darin, ein Serverobjekt zu erstellen. Das Serverobjekt instanziiert und kommuniziert die Clientanwendung auf dem Servercomputer. Die Clientanwendung führt dies über ein Proxyobjekt aus, das auf dem Client erstellt wird. In diesem Beispiel befindet sich das Serverobjekt in einer Klassenbibliothek (DLL) und heißt myRemoteClass.

  1. Erstellen Sie eine neue Klassenbibliotheksanwendung in Visual C# .NET. Nennen Sie das Projekt ServerClass. Class1 wird standardmäßig erstellt.

  2. Benennen Sie in Projektmappen-Explorer die Class1.cs-Codedatei in ServerClass.cs um.

  3. Öffnen Sie ServerClass.cs , und benennen Sie Class1 in myRemoteClass um. Außerdem müssen Sie den Standardkonstruktor für die Klasse in umbenennen, damit er mit dem Klassennamen übereinstimmt. myRemoteClass sollte von der -Klasse erben MarshalByRefObject . Ihre Klasse sollte nun wie folgt aussehen:

    public class myRemoteClass: MarshalByRefObject
    {
        public myRemoteClass()
        {
          // TO DO: Add constructor logic here.
        }
    }
    
  4. Fügen Sie myRemoteClass eine öffentliche Methode hinzu, die eine Zeichenfolge akzeptiert, der Konsole eine Meldung mit dem Wert der Zeichenfolge anzeigt und True zurückgibt, wenn die Zeichenfolge nicht leer ist.

    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. Erstellen Sie das Projekt, um die ServerClass.dll-Assembly zu erstellen.

  6. Speichern und schließen Sie das Projekt.

Erstellen der Remoteserveranwendung

Nachdem Sie das Serverobjekt erstellt haben, mit dem der Client kommuniziert, müssen Sie dieses Objekt beim Remoting-Framework registrieren. Wenn Sie das Objekt registrieren, müssen Sie auch den Server starten und den Server an einem Port lauschen lassen, damit Clients eine Verbindung mit diesem Port herstellen können. Dazu benötigen Sie einen Projekttyp, der eine ausführbare Datei ausgibt.

Der Grund für das Einschließen des Serverobjekts in ein separates Projekt ist, dass Sie problemlos aus dem Clientprojekt auf das Serverobjekt verweisen können. Wenn Sie es in dieses Projekt einschließen, können Sie nicht darauf verweisen, da Verweise nur auf DLL-Dateien festgelegt werden können.

  1. Erstellen Sie eine neue Konsolenanwendung in Visual C# .NET, um den Remoteserver zu starten. Class1 wird standardmäßig erstellt.

  2. Benennen Sie in Projektmappen-Explorer die Class1.cs-Datei in RemoteServer.cs um.

  3. Fügen Sie einen Verweis auf den System.Runtime.Remoting Namespace hinzu.

  4. Fügen Sie einen Verweis auf die ServerClass.dll-Assembly hinzu , die Sie im vorherigen Abschnitt erstellt haben.

  5. Verwenden Sie die using -Anweisung für die RemotingNamespaces , Remoting.Channelsund Remoting.Channels.TCP , damit Sie Deklarationen in diesen Namespaces später in Ihrem Code nicht qualifizieren müssen. Sie müssen die using -Anweisung vor allen anderen Deklarationen verwenden.

    using System.Runtime.Remoting;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;
    
  6. Deklarieren Sie die entsprechende Variable. Deklarieren und initialisieren Sie ein TcpChannel Objekt, das auf Clients lauscht, um eine Verbindung mit einem bestimmten Port herzustellen, der in diesem Beispiel Port 8085 ist. Verwenden Sie die RegisterChannel -Methode, um den Kanal bei den Kanaldiensten zu registrieren. Fügen Sie den folgenden Deklarationscode in der Main Prozedur von hinzu Class1:

    TcpChannel chan = new TcpChannel(8085);
    ChannelServices.RegisterChannel(chan);
    
  7. Rufen Sie die RegisterWellKnownType -Methode des RemotingConfiguration -Objekts auf, um das ServerClass Objekt beim Remoting-Framework zu registrieren, und geben Sie die folgenden Parameter an:

    • Der vollständige Typname des Objekts, das registriert wird (in diesem Beispiel ServerClass.myRemoteClass ), gefolgt vom Assemblynamen ServerClass. Geben Sie hier sowohl den Namen des Namespace als auch den Klassennamen an. Da Sie im vorherigen Abschnitt keinen Namespace angegeben haben, wird der Standardstammnamespace verwendet.

    • Benennen Sie den Endpunkt, in dem das Objekt veröffentlicht werden soll, als RemoteTest. Clients müssen diesen Namen kennen, um eine Verbindung mit dem Objekt herstellen zu können.

    • Verwenden Sie den SingleCall Objektmodus, um den endgültigen Parameter anzugeben. Der Objektmodus gibt die Lebensdauer des Objekts an, wenn es auf dem Server aktiviert wird. SingleCall Bei -Objekten wird für jeden Aufruf, den ein Client durchführt, eine neue instance der -Klasse erstellt, auch wenn derselbe Client dieselbe Methode mehrmals aufruft. Singleton Andererseits werden Objekte nur einmal erstellt, und alle Clients kommunizieren mit demselben Objekt.

      RemotingConfiguration.RegisterWellKnownServiceType(
      System.Type.GetType("ServerClass.myRemoteClass, ServerClass"),
      "RemoteTest",
      WellKnownObjectMode.SingleCall);
      
  8. Verwenden Sie die ReadLine -Methode des Console -Objekts, um die Serveranwendung weiterhin auszuführen.

    System.Console.WriteLine("Hit <enter> to exit...");
    System.Console.ReadLine();
    
  9. Erstellen Sie das Projekt.

  10. Speichern und schließen Sie das Projekt.

References

Eine Übersicht über .NET Remoting finden Sie in der Dokumentation zum .NET Framework Entwicklerhandbuch.