Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
Erstellen Sie eine neue Klassenbibliotheksanwendung in Visual C# .NET. Benennen Sie die Project ServerClass. Klasse1 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. 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. } }
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; } }
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 ü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.
Erstellen Sie eine neue Konsolenanwendung in Visual C# .NET, um den Remoteserver zu starten. Klasse1 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 die NamespacesRemoting.Channels
undRemoting.Channels.TCP
dieRemoting
Namespaces, damit Sie Deklarationen in diesen Namespaces später im Code nicht qualifizieren müssen. Sie müssen dieusing
Anweisung vor 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 überwacht, um eine Verbindung mit einem bestimmten Port herzustellen, der port 8085 in diesem Beispiel ist. Verwenden Sie dieRegisterChannel
Methode, um den Kanal bei den Kanaldiensten zu registrieren. Fügen Sie den folgenden Deklarationscode in derMain
Prozedur vonClass1
: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 (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);
Verwenden Sie die
ReadLine
Methode desConsole
Objekts, um die Serveranwendung 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 zu .NET Framework Developer.For an overview of .NET Remoting, see the .NET Framework Developer's Guide documentation.