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.
Dieses Thema bezieht sich auf eine veraltete Technologie, die zum Zwecke der Abwärtskompatibilität mit vorhandenen Anwendungen beibehalten wird und nicht für die neue Entwicklung empfohlen wird. Verteilte Anwendungen sollten jetzt mit Windows Communication Foundation (WCF) entwickelt werden.
An und für sich ist die RemotableType -Klasse, die im Thema Vorgehensweise: Erstellen eines remotefähigen Typs definiert wird, keine besondere Klasse. Damit Objekte in anderen Anwendungsdomänen Instanzen dieses Objekts remote erstellen können, müssen Sie eine Host- oder Listeneranwendung entwickeln, die Folgendes leistet:
Wählen Sie einen Channel aus, und registrieren Sie diesen. Ein Channel ist ein Objekt, das Netzwerkprotokolle und Serialisierungsformate für Sie verwaltet.
Registrieren Sie den Typ im .NET-Remotingsystem, damit der Channel Anforderungen für den Typ empfangen kann.
Das .NET Framework beinhaltet drei Standardchannels, HttpChannel (hier wird standardmäßig das SOAP-Format verwendet), TcpChannel (hier wird standardmäßig das Binärformat verwendet) und IpcChannel (hier wird standardmäßig das Binärformat verwendet). HttpChannel erlaubt die Kommunikation über Firewall, ohne dass ein Anschluss geöffnet werden muss, und unterstützt Standardsicherheits- und Authentifizierungsprotokolle. Weitere Informationen zur Auswahl des Channels, der sich für ein bestimmtes Szenario eignet, finden Sie unter Channels.
Sie können zur Entwicklung von Listeneranwendungen jeden beliebigen Typ von Anwendungsdomäne verwenden – eine Windows Forms-Anwendung, eine ASP.NET-Webanwendung, eine Konsolenanwendung, einen Windows-Dienst (auch Windows NT-Dienst genannt) oder jede andere verwaltete Anwendungsdomäne. Weil die Remotekonfiguration für jede Anwendungsdomäne festgelegt wird, können Anforderungen nur überwacht werden, wenn die Anwendungsdomäne ausgeführt wird.
Hinweis: |
|---|
| Im Gegensatz zu COM startet das Remotingsystem die Host- oder Serveranwendung nicht für Sie. Dies ist ein wichtiger Unterschied zwischen .NET-Remoting und der Remoteaktivierung für COM. |
Die Konfiguration kann entweder programmgesteuert oder mithilfe der Anwendungskonfigurationsdatei bzw. der Computerkonfigurationsdatei erfolgen.
Das Remotingsystem nutzt die in dieser Datei enthaltenen Informationen, um Remoteanforderungen zu empfangen und an eine Instanz eines remotefähigen Typs weiterzuleiten. In dieser Datei werden der Serveraktivierungsmodus, der Name und die Assembly des Typs, für den der Datenverkehr überwacht werden soll, und der URI (Uniform Resource Identifier) bzw. der externe Name des Objekts definiert. (Weitere Informationen zu Objekt-URIs und Remoting finden Sie in Aktivierungs-URLs.)
Hinweis: |
|---|
| Die obige Konfigurationsdatei enthält zwar nur ein paar Einstellungen, die meisten Probleme bei der Verwendung von .NET-Remoting treten jedoch auf, weil einige dieser Einstellungen entweder falsch sind oder nicht mit den Konfigurationseinstellungen für Clientanwendungen übereinstimmen. Es passiert schnell, dass ein Name falsch geschrieben, ein Anschluss vergessen oder ein Attribut nicht angegeben wird. Wenn Sie Probleme mit der Remoteanwendung haben, überprüfen Sie zuerst die Konfigurationseinstellungen. |
Der Einsatz einer Konfigurationsdatei ermöglicht es Ihnen beispielsweise, die Remotingkonfiguration zu ändern, ohne die ausführbaren Dateien neu kompilieren zu müssen. Informationen zur Konfiguration der .NET-Remotinginfrastruktur finden Sie unter Schema für Remoteeinstellungen.
Hinweis: |
|---|
| Vollständige Anweisungen zum Erstellen und Ausführen dieses Beispiels finden Sie unter Vorgehensweise: Kompilieren und Ausführen einer Basisremoteanwendung. |
So implementieren Sie eine einfache Hostanwendungsdomäne, die eine Konfigurationsdatei verwendet
Erstellen Sie ausgehend von Vorgehensweise: Erstellen eines remotefähigen Typs ein anderes Verzeichnis unter
remoting, und nennen Sie dieseshost. Erstellen Sie eine Konfigurationsdatei für die Remoteklasse. Da die Hostanwendung die Konfiguration für die Remoteklasse laden können muss, sollte die Konfigurationsdatei im gleichen Verzeichnis gespeichert werden wie die Assembly der Hostanwendung, weil sie sonst nicht gefunden wird und eine Ausnahme ausgelöst wird. Der folgende Code stellt eine Konfigurationsdatei dar, die angibt, dass es sich beim Remoteobjekt um ein Singleton handelt, das von derRemotableType-Klasse implementiert wird, die sich in einer Assembly namensRemotableTypebefindet. Als Nächstes wird ein HttpChannel registriert, der den Anschluss 8989 überwacht. Speichern Sie diese Datei im Verzeichnisremoting\listener. Der Dateiname sollte das Format Anwendungsname.exe.config haben. In diesem Fall erhält das Objekt die Bezeichnunglistener.exe.config.<configuration> <system.runtime.remoting> <application> <service> <wellknown mode="Singleton" type="RemotableType, RemotableType" objectUri="RemotableType.rem" /> </service> <channels> <channel ref="http" port="8989"/> </channels> </application> </system.runtime.remoting> </configuration>Erstellen Sie eine neue Quelldatei in der Sprache Ihrer Wahl. Importieren Sie am Anfang der Quelldatei den System.Runtime.Remoting-Namespace:
Imports System Imports System.Runtime.Remotingusing System; using System.Runtime.Remoting;Laden Sie in der Main-Methode die Konfigurationsdatei, mit der die Remoteklasse konfiguriert wird, zeigen Sie eine Meldung an, die den Benutzer darüber informiert, dass die Hostanwendung ausgeführt wird, und warten Sie dann auf einen Tastendruck. Speichern Sie diese Datei im Verzeichnis
remoting\listener.Public Class Listener Public Shared Sub Main() RemotingConfiguration.Configure("Listener.exe.config", False) Console.WriteLine("Listening for requests. Press enter to exit...") Console.ReadLine() End Sub End Classpublic class Listener { public static void Main() { RemotingConfiguration.Configure("Listener.exe.config", false); Console.WriteLine("Listening for requests. Press enter to exit..."); Console.ReadLine(); } }Kopieren Sie RemotableType.dll, die in Vorgehensweise: Erstellen eines remotefähigen Typs erstellt wurde, in das Verzeichnis
remoting\listener. Die Hostanwendung muss auf diese Assembly verweisen. Kompilieren Sie diese Klasse in eine ausführbare Datei, indem Sie den folgenden Befehl eingeben:vbc /r:RemotableType.dll Listener.vbcsc /noconfig /r:RemotableType.dll Listener.csSie verfügen jetzt über eine Assembly namens
Listener.exe. Versuchen Sie jetzt, die Anwendung auszuführen, um zu sehen, ob die Konfiguration funktioniert. Möglicherweise wird ein Sicherheitsdialogfeld angezeigt, wenn eine Firewall gegenwärtig den Anschluss 8989 blockiert. Wenn dies der Fall ist, klicken Sie auf die Schaltfläche "Zulassen", um die Firewall an diesem Anschluss zeitweilig zu öffnen.Informationen über die Verwendung des remotefähigen Typs finden Sie unter Vorgehensweise: Erstellen einer Clientanwendung.
Beispiel
' Listener.vb
Public Class Listener
Public Shared Sub Main()
RemotingConfiguration.Configure("Listener.exe.config", False)
Console.WriteLine("Listening for requests. Press enter to exit...")
Console.ReadLine()
End Sub
End Class
// Listener.cs
using System;
using System.Runtime.Remoting;
public class Listener
{
public static void Main(string[] args)
{
RemotingConfiguration.Configure("Listener.exe.config", false);
Console.WriteLine("Listening for requests. Press enter to exit...");
Console.ReadLine();
}
}
Siehe auch
Aufgaben
Vorgehensweise: Erstellen einer Hostanwendung
Verweis
Schema für Remoteeinstellungen
Konzepte
Konfiguration von Remoteanwendungen
Serveraktivierung
Weitere Ressourcen
Erstellen einer .NET Framework-Basisremoteanwendung
Erstellungsdatum: 2010-02-13
Hinweis: