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.
Erstellen Sie eine neue Klassenbibliotheksanwendung in Visual C# .NET. Nennen Sie das Projekt ServerClass. Class1 wird standardmäßig erstellt.
Benennen Sie in Projektmappen-Explorer die Class1.cs-Codedatei in ServerClass.cs um.
Ö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. } }
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; } }
Erstellen Sie das Projekt, um die ServerClass.dll-Assembly zu erstellen.
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.
Erstellen Sie eine neue Konsolenanwendung in Visual C# .NET, um den Remoteserver zu starten. Class1 wird standardmäßig erstellt.
Benennen Sie in Projektmappen-Explorer die Class1.cs-Datei in RemoteServer.cs um.
Fügen Sie einen Verweis auf den
System.Runtime.Remoting
Namespace hinzu.Fügen Sie einen Verweis auf die ServerClass.dll-Assembly hinzu , die Sie im vorherigen Abschnitt erstellt haben.
Verwenden Sie die
using
-Anweisung für dieRemoting
Namespaces ,Remoting.Channels
undRemoting.Channels.TCP
, damit Sie Deklarationen in diesen Namespaces später in Ihrem Code nicht qualifizieren müssen. Sie müssen dieusing
-Anweisung vor allen anderen Deklarationen verwenden.using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp;
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 dieRegisterChannel
-Methode, um den Kanal bei den Kanaldiensten zu registrieren. Fügen Sie den folgenden Deklarationscode in derMain
Prozedur von hinzuClass1
:TcpChannel chan = new TcpChannel(8085); ChannelServices.RegisterChannel(chan);
Rufen Sie die
RegisterWellKnownType
-Methode desRemotingConfiguration
-Objekts auf, um dasServerClass
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);
Verwenden Sie die
ReadLine
-Methode desConsole
-Objekts, um die Serveranwendung weiterhin auszuführen.System.Console.WriteLine("Hit <enter> to exit..."); System.Console.ReadLine();
Erstellen Sie das Projekt.
Speichern und schließen Sie das Projekt.
References
Eine Übersicht über .NET Remoting finden Sie in der Dokumentation zum .NET Framework Entwicklerhandbuch.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für