Gewusst wie: Hosten eines WCF-Diensts in einer verwalteten Anwendung
Wenn ein Dienst in einer verwalteten Anwendung gehostet werden soll, betten Sie den Code für den Dienst in den verwalteten Anwendungscode ein, definieren Sie entweder imperativ im Code oder deklarativ über die Konfiguration einen Endpunkt für den Dienst, und erstellen Sie dann eine Instanz von ServiceHost.
Um den Empfang von Nachrichten zu starten, rufen Sie die Open-Methode der ServiceHost-Instanz auf. Damit wird ein Listener für den Dienst erstellt und geöffnet Diese Art des Hostings wird häufig auch als "Selbsthosting" bezeichnet, weil die verwaltete Anwendung selbst die für das Hosting erforderlichen Vorgänge ausführt. Um den Dienst zu schließen, rufen Sie die System.ServiceModel.Channels.CommunicationObject.Close-Methode der ServiceHost-Instanz auf.
Ein Dienst kann auch in einem verwalteten Windows-Dienst in Internet Information Services (IIS) oder in Windows Process Activation Service (WAS) gehostet werden. Weitere Informationen zu den Hostoptionen für einen Dienst finden Sie unter Hosting-Dienste.
Dienste in einer verwalteten Anwendung zu hosten ist die flexibelste Option, da sie für die Bereitstellung die geringsten Anforderungen an die Infrastruktur stellt. Weitere Informationen zum Hosting von Diensten in verwalteten Anwendungen finden Sie unter Hosten in einer verwalteten Anwendung.
Im folgenden Verfahren wird das Implementieren eines selbst gehosteten Diensts in einer Konsolenanwendung veranschaulicht. Ein funktionsfähiges Beispiel, auf dem dieses Verfahren basiert, finden Sie unter Self Host Sample.
So erstellen Sie einen selbst gehosteten Dienst
Definieren Sie über die Konfiguration einen Dienstendpunkt für den Dienst.
Erstellen Sie eine Schnittstelle für den Dienst. Informationen finden Sie unter Gewusst wie: Definieren eines Windows Communication Foundation-Dienstvertrags.
Implementieren Sie die Schnittstelle, um den Diensttyp zu erstellen. Informationen finden Sie unter Gewusst wie: Implementieren eines Windows Communication Foundation-Dienstvertrags. Im folgenden Beispiel heißt die Implementierung
MathService
.Erstellen Sie eine Methode zum Starten des Diensts. In diesem Beispiel wird die Main-Methode verwendet.
Erstellen Sie eine Instanz der Uri-Klasse mit der Basisadresse des Diensts. In diesem Beispiel wird die statische AppSettings-Eigenschaft der ConfigurationManager-Klasse verwendet, um eine Basisadresse auszuwählen. Vergessen Sie nicht, dem Projekt einen Projektverweis auf System.Configuration.dll hinzuzufügen. Die Basisadresse kann dann in der Konfigurationsdatei für die Hostanwendung unter dem <appSettings>-Element festgelegt werden.
Fügen Sie der Anwendungskonfigurationsdatei ein <appSettings>-Element hinzu. Verwenden Sie das <add>-Element dann mit einem geeigneten key-Attribut. In diesem Fall entspricht der key-Wert dem Parameter, der im vorherigen Schritt der AppSettings-Eigenschaft übergeben wurde.
Erstellen Sie eine Instanz der ServiceHost-Klasse, wobei Sie einen Type, der den Diensttyp darstellt, und den URI (Uniform Resource Identifier) der Basisadresse ServiceHost übergeben.
Rufen Sie die Open-Methode der ServiceHost-Instanz auf.
So erstellen Sie einen Endpunkt in der Konfiguration
- Fügen Sie dem Verzeichnis, das die Dienstassembly enthält, eine Konfigurationsdatei hinzu. Weitere Informationen zur Konfiguration finden Sie unter Konfigurieren von Bindungen für Windows Communication Foundation-Dienste.
Beispiel
Im folgenden Beispiel wird ein ServiceHost-Objekt als Host für einen Dienst des Typs CalculatorService
erstellt, und dann wird die Open-Methode der ServiceHost-Instanz aufgerufen. Die Basisadresse wird in Code bereitgestellt, während der relative Pfad in der Konfiguration angegeben wird.
Damit mit ServiceMetadata Utility Tool (svcutil.exe) ein Client für den Dienst erstellt werden kann, muss die Bindung für den Endpunkt das HTTP-Protokoll verwenden. Weitere Informationen zu Bindungen finden Sie unter Verwenden von Bindungen, um Dienste und Clients zu konfigurieren und Vom System bereitgestellte Bindungen. Das vollständige Beispiel, auf dem dieses Thema basiert, finden Sie im Beispiel unter Self-Host.
Siehe auch
Aufgaben
Gewusst wie: Hosten eines WCF-Diensts in IIS
Gewusst wie: Definieren eines Windows Communication Foundation-Dienstvertrags
Gewusst wie: Implementieren eines Windows Communication Foundation-Dienstvertrags
Referenz
Uri
AppSettings
ConfigurationManager
Konzepte
Hosting-Dienste
Verwenden von Bindungen, um Dienste und Clients zu konfigurieren
Vom System bereitgestellte Bindungen