Freigeben über


Erstellen einer Hostanwendung

Die im Thema Erstellen eines remotefähigen Typs definierte RemotableType-Klasse stellt an sich keine spezielle Klasse dar. Um Objekten in anderen Anwendungsdomänen das Remoteerstellen von Instanzen dieses Objekts zu ermöglichen, müssen Sie eine Host- oder Listeneranwendung erstellen, die zwei Vorgänge ausführen kann:

  • Auswahl und Registrierung eines Channels, bei dem es sich um ein Objekt handelt, das die Netzwerkprotokolle und Serialisierungsformate für Sie verarbeitet.
  • Registrieren Ihres Typs beim .NET Remoting-System, so dass Anforderungen für den Typ mit Hilfe des Channels überwacht werden können.

Das .NET Framework enthält zwei Standardchannels: HttpChannel (verwendet SOAP-Formatierung) und TcpChannel (verwendet binäre Formatierung). HttpChannel eignet sich als Ausgangspunkt, da in einigen Szenarios mit Firewalls kein Öffnen eines Anschlusses erforderlich ist und die Standardprotokolle für Sicherheit und Authentifizierung unterstützt werden. Weitere Informationen über die Auswahl von geeigneten Channels für das jeweilige Szenario finden Sie unter Channel.

Sie können Listeneranwendungen mit beliebigen Typen von Anwendungsdomänen erstellen. Dabei kann es sich im eine Windows Forms-Anwendung, eine ASP.NET-Webanwendung, eine Konsolenanwendung, einen Windows-Dienst (auch als Windows NT-Dienst bezeichnet) oder eine beliebige andere verwaltete Anwendungsdomäne handeln. Da die Remotekonfiguration auf Basis der jeweiligen Anwendungsdomäne vorgenommen wird, muss die Anwendungsdomäne für die Überwachung von Anforderungen ausgeführt werden.

Hinweis   Im Gegensatz zu COM wird beim Remoting die Host- bzw. Serveranwendung nicht automatisch gestartet. Dies ist ein wesentlicher Unterschied zwischen .NET Remoting und Remoteaktivierung in COM.

Die Konfiguration kann programmgesteuert oder unter Verwendung einer Anwendungs- bzw. Computerkonfigurationsdatei erfolgen. Durch den folgenden Code wird eine einfache RemotableType-Hostanwendungsdomäne implementiert, die eine Konfigurationsdatei verwendet. (Durch die Verwendung einer Konfigurationsdatei können Sie u. a. die Remotekonfiguration ändern, ohne die ausführbare Datei neu zu kompilieren.) Ausführliche Informationen über die Konfiguration der .NET Remoting-Infrastruktur finden Sie unter Konfiguration.

' Listener.vb
Imports System
Imports System.Runtime.Remoting

Public Class Listener
   Public Shared Sub Main()
      RemotingConfiguration.Configure("Listener.exe.config")
      Console.WriteLine("Listening for requests. Press Enter to exit...")
      Console.ReadLine()
   End Sub 'Main
End Class 'Listener
[C#]
// Listener.cs
using System;
using System.Runtime.Remoting;

public class Listener{
   public static void Main(){
      RemotingConfiguration.Configure("Listener.exe.config");
      Console.WriteLine("Listening for requests. Press Enter to exit...");
      Console.ReadLine();
   }
}

Um diese Klasse mit Hilfe der Befehlszeilentools aus dem Lieferumfang von .NET Framework SDK in eine ausführbare Host- bzw. Listenerdatei zu kompilieren, speichern Sie sie als Listener.Spracherweiterung (oder verwenden Sie einen anderen Dateinamen Ihrer Wahl, wobei die Spracherweiterung für die jeweils zu kompilierende Sprache steht). Speichern Sie die Datei in demselben Verzeichnis, in dem auch die RemotableType.dll gespeichert wurde, die im Thema Erstellen eines remotefähigen Typs erstellt wurde. Geben Sie an der Eingabeaufforderung in diesem Verzeichnis folgenden Befehl ein:

Visual Basic

vbc /r:RemotableType.dll Listener.vb

C#

csc /noconfig /r:RemotableType.dll Listener.cs

In diesem Beispiel lautet der Dateiname:

Visual Basic

Listener.vb

C#

Listener.cs

Damit die Konfiguration für die RemotableType-Klasse geladen werden kann muss die Listener-Klasse in der Lage sein, die Datei Listener.exe.config zu finden. Die Konfigurationsdatei muss in demselben Verzeichnis wie Listener.exe gespeichert werden. Andernfalls kann sie nicht gefunden werden, und es wird eine Ausnahme ausgelöst. Der folgende Code veranschaulicht die Konfigurationsdatei Listener.exe.config für diese Listener- bzw. Hostanwendungsdomäne.

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

Das Remotingsystem verwendet die Informationen in dieser Datei zum Überwachen und Weiterleiten von Remoteanforderungen für eine Instanz eines remotefähigen Typs. In der Datei wird der Serveraktivierungsmodus Singleton, der Typname und die Assembly des Typs, in dessen Namen überwacht wird, sowie der URI (Uniform Resource Identifier) bzw. der externe Name des Objekts angegeben. (Weitere Informationen über Objekt-URIs und Remoting finden Sie unter Aktivierungs-URLs.) In der Datei wird außerdem das Remotingsystem angewiesen, die Überwachung von Anforderungen an Anschluss 8989 mit dem vom System bereitgestellten HttpChannel auszuführen.

Hinweis   Obwohl die oben genannte Konfigurationsdatei nur wenige Einstellungen enthält, treten hier die meisten Probleme bei der Verwendung von .NET Remoting auf, da einige dieser Einstellungen falsch sein können oder nicht den Konfigurationseinstellungen für Clientanwendungen entsprechen. Leicht kann ein Name falsch eingegeben, ein Anschluss vergessen oder ein Attribut ignoriert werden. Wenn Probleme mit der Remoteanwendung auftreten, überprüfen Sie zunächst die Konfigurationseinstellungen.

Siehe auch

Erstellen einer grundlegenden .NET Remoting-Anwendung | Konfiguration | Schema für Remoteeinstellungen | Serveraktivierung | WellKnownObjectMode.Singleton