Share via


Gewusst wie: Erstellen einer Hostanwendung

An und für sich ist die RemotableType -Klasse, die im Thema Gewusst wie: 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.

NoteHinweis:

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.)

NoteHinweis:

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.

NoteHinweis:

Vollständige Anweisungen zum Erstellen und Ausführen dieses Beispiels finden Sie unter Gewusst wie: Kompilieren und Ausführen einer Basisremoteanwendung.

So implementieren Sie eine einfache Hostanwendungsdomäne, die eine Konfigurationsdatei verwendet

  1. Ausgehend von Gewusst wie: Erstellen eines remotefähigen Typs erstellen Sie unter remoting ein neues Verzeichnis und nennen es host. 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 der RemotableType-Klasse implementiert wird, die sich in einer Assembly namens RemotableType befindet. Danach wird ein HttpChannel-Objekt registriert, das Anschluss 8989 überwacht. Speichern Sie diese Datei im Verzeichnis remoting\listener. Der Dateiname sollte das Format Anwendungsname.exe.config haben. In diesem Fall erhält das Objekt die Bezeichnung listener.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>
    
  2. 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.Remoting
    
    using System;
    using System.Runtime.Remoting;
    
  3. 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 Class
    public class Listener
    {
        public static void Main()
        {
            RemotingConfiguration.Configure("Listener.exe.config", false);
            Console.WriteLine("Listening for requests. Press enter to exit...");
            Console.ReadLine();
        }
    
    }
    
  4. Kopieren Sie die Datei RemotableType.dll, die in Gewusst wie: Erstellen eines remotefähigen Typs erzeugt wurde, ins 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.vb
    csc /noconfig /r:RemotableType.dll Listener.cs
    
  5. Sie 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.

  6. Informationen zur Verwendung des remotefähigen Typs finden Sie unter Gewusst wie: 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

Gewusst wie: Erstellen einer Hostanwendung

Referenz

Schema für Remoteeinstellungen

Konzepte

Konfiguration von Remoteanwendungen
Serveraktivierung

Weitere Ressourcen

Erstellen einer .NET Framework-Basisremoteanwendung

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.