Verwenden von Visual C# zum Erstellen eines Remoteservers

Dieser Artikel hilft Ihnen beim Erstellen eines Remoteservers, auf den eine andere Anwendung mit Visual C# zugreifen kann.

Originalversion des Produkts:   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 Laufzeitframework für .NET Remoting 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 wird von der Clientanwendung instanziiert und auf dem Servercomputer kommuniziert. 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 Codedatei "Class1.cs" in "ServerClass.cs" um.

  3. Öffnen Sie "ServerClass.cs ", und benennen Sie "Class1 " in "myRemoteClass" um. Sie müssen auch den Standardkonstruktor für die Klasse umbenennen, damit er dem Klassennamen entspricht. myRemoteClass sollte von der Klasse erben MarshalByRefObject . Ihre Klasse sollte jetzt wie folgt angezeigt werden:

    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 einem 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 überwachen 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, das Serverobjekt in ein separates Projekt einzuschließen, besteht darin, dass Sie problemlos vom Clientprojekt aus 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 Datei "Class1.cs" 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 Namespaces und die RemotingNamespaces Remoting.Channels, Remoting.Channels.TCP damit Sie Deklarationen in diesen Namespaces später im 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, d. h. Port 8085 in diesem Beispiel. Verwenden Sie die RegisterChannel Methode, um den Kanal bei den Kanaldiensten zu registrieren. Fügen Sie den folgenden Deklarationscode in der Main Prozedur 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 Namespaces als auch den Klassennamen an. Da Sie im vorherigen Abschnitt keinen Namespace angegeben haben, wird der Standardstammnamespace verwendet.

    • Nennen Sie den Endpunkt, an 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 aufruft, eine neue Instanz der Klasse erstellt, auch wenn derselbe Client dieselbe Methode mehrmals aufruft. Auf der anderen Seite Singleton 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 weiter 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 Developer's Guide.