Freigeben über


Verwenden von Visual C# zum Erstellen eines Remoteservers

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

Originalproduktversion: 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 Microsoft .NET Framework-Klassenbibliotheksnamespaces:

  • 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 mit der 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 wird als myRemoteClass bezeichnet.

  1. Erstellen Sie eine neue Klassenbibliotheksanwendung in Visual C# .NET. Benennen Sie die Project ServerClass. Klasse1 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. Sie müssen auch den Standardkonstruktor für die Klasse umbenennen, sodass er dem Klassennamen entspricht. myRemoteClass sollte von der MarshalByRefObject Klasse erben. Ihre Klasse sollte nun wie folgt angezeigt werden:

    public class myRemoteClass: MarshalByRefObject
    {
        public myRemoteClass()
        {
          // TO DO: Add constructor logic here.
        }
    }
    
  4. Fügen Sie eine öffentliche Methode zu myRemoteClass hinzu, die eine Zeichenfolge verwendet, zeigt eine Meldung an der Konsole mit einem Wert der Zeichenfolge an und gibt True zurück, 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 auf einfache Weise auf das Serverobjekt aus dem Clientprojekt 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. Klasse1 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 Namespaces Remoting.Channelsund Remoting.Channels.TCP die RemotingNamespaces, damit Sie Deklarationen in diesen Namespaces später im Code nicht qualifizieren müssen. Sie müssen die using Anweisung vor 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 überwacht, um eine Verbindung mit einem bestimmten Port herzustellen, der port 8085 in diesem Beispiel 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 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 (d. h . ServerClass.myRemoteClass in diesem Beispiel), 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.

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

    • 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 vorgibt, eine neue Instanz der Klasse erstellt, auch wenn derselbe Client mehrmals dieselbe Methode 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 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 zu .NET Framework Developer.For an overview of .NET Remoting, see the .NET Framework Developer's Guide documentation.