(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

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, deklarativ über die Konfiguration oder mithilfe der Standardendpunkte einen Endpunkt für den Dienst, und erstellen Sie dann eine Instanz von ServiceHost.

Rufen Sie die Open-Methode der ServiceHost-Instanz auf, um den Empfang von Nachrichten zu starten. 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 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 finden Sie unter 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 finden Sie unter 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.

So erstellen Sie einen selbst gehosteten Dienst

  1. Klicken Sie Visual Studio 2012, und wählen Sie im Menü Datei zunächst Neu und dann Projekt... aus.

  2. Wählen Sie in der Liste Installierte Vorlagen die Option Visual C# und anschließend Windows oder Visual Basic aus. Abhängig von den Visual Studio 2012-Einstellungen befindet sich ggf. eine oder es befinden sich beide Optionen im Knoten Andere Sprachen in der Liste Installierte Vorlagen.

  3. Wählen Sie in der Liste Windows die Option Konsolenanwendung aus. Geben Sie im Feld Name die Bezeichnung SelfHost ein, und klicken Sie auf OK.

  4. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf SelfHost, und wählen Sie Verweis hinzufügen aus. Wählen Sie auf der Registerkarte .NET die Option System.ServiceModel aus, und klicken Sie anschließend auf OK.

    Tipp Tipp

    Wenn das Fenster Projektmappen-Explorer nicht angezeigt wird, wählen Sie im Menü Ansicht die Option Projektmappen-Explorer aus.

  5. Doppelklicken Sie im Fenster von Projektmappen-Explorer auf die Datei Program.cs oder Module1.vb, um sie ggf. im Codefenster zu öffnen. Fügen Sie am Anfang der Datei die folgenden Anweisungen ein.

    
    using System.ServiceModel;
    using System.ServiceModel.Description;
    
    
    
  6. Definieren und implementieren Sie einen Dienstvertrag. In diesem Beispiel wird ein HelloWorldService-Element definiert, das auf Grundlage der Eingabe in den Dienst eine Nachricht zurückgibt.

    
    [ServiceContract]
    public interface IHelloWorldService
    {
        [OperationContract]
        string SayHello(string name);
    }
    
    public class HelloWorldService : IHelloWorldService
    {
        public string SayHello(string name)
        {
            return string.Format("Hello, {0}", name);
        }
    }
    
    
    
    Hinweis Hinweis

    Weitere Informationen finden Sie unter zum Definieren und Implementieren einer Dienstschnittstelle finden Sie unter Gewusst wie: Definieren eines Windows Communication Foundation-Dienstvertrags und Gewusst wie: Implementieren eines Windows Communication Foundation-Dienstvertrags.

  7. Erstellen Sie am Beginn der Main-Methode eine Instanz der Uri-Klasse mit der Basisadresse des Diensts.

    
    Uri baseAddress = new Uri("http://localhost:8080/hello");
    
    
    
  8. Erstellen Sie eine Instanz der ServiceHost-Klasse, wobei Sie ein Type-Objekt, das den Diensttyp darstellt, und den URI (Uniform Resource Identifier) der Basisadresse ServiceHost(Type, Uri[]) übergeben. Aktivieren Sie die Veröffentlichung von Metadaten, und rufen Sie die Open-Methode für das ServiceHost-Objekt auf, um den Dienst zu initialisieren und auf den Empfang von Nachrichten vorzubereiten.

    
    // Create the ServiceHost.
    using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
    {
        // Enable metadata publishing.
        ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
        smb.HttpGetEnabled = true;
        smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
        host.Description.Behaviors.Add(smb);
    
        // Open the ServiceHost to start listening for messages. Since
        // no endpoints are explicitly configured, the runtime will create
        // one endpoint per base address for each service contract implemented
        // by the service.
        host.Open();
    
        Console.WriteLine("The service is ready at {0}", baseAddress);
        Console.WriteLine("Press <Enter> to stop the service.");
        Console.ReadLine();
    
        // Close the ServiceHost.
        host.Close();
    }
    
    
    
    Hinweis Hinweis

    In diesem Beispiel werden Standardendpunkte verwendet. Für diesen Dienst ist keine Konfigurationsdatei erforderlich. Wenn keine Endpunkte konfiguriert sind, wird von der Runtime ein Standardendpunkt für alle Basisadressen in jedem Dienstvertrag hinzugefügt, der vom Dienst implementiert wird. Weitere Informationen finden Sie unter zu Standardendpunkten finden Sie unter Vereinfachte Konfiguration und Vereinfachte Konfiguration für WCF-Dienste.

  9. Drücken Sie STRG+UMSCHALT+B, um die Projektmappe zu erstellen.

So testen Sie den Dienst

  1. Drücken Sie STRG+F5, um den Dienst auszuführen.

  2. Öffnen Sie den WCF-Testclient.

    Tipp Tipp

    Zum Starten von WCF-Testclient öffnen Sie die Visual Studio 2012-Eingabeaufforderung und geben WcfTestClient.exe ein.

  3. Wählen Sie im Menü Datei den Befehl Dienst hinzufügen aus.

  4. Geben Sie im Adressfeld die Bezeichnung http://localhost:8080/hello ein, und klicken Sie auf OK.

    Tipp Tipp

    Stellen Sie sicher, dass der Dienst ausgeführt wird, oder ein Fehler tritt bei diesem Schritt auf. Haben Sie die Basisadresse im Code geändert, verwenden Sie in diesem Schritt die geänderte Basisadresse.

  5. Doppelklicken Sie im Knoten Meine Dienstprojekte auf SayHello. Geben Sie in der Liste Anforderung in der Spalte Wert Ihren Namen ein, und klicken Sie auf Aufrufen. In der Liste Antwort erscheint nun eine Antwortnachricht.

Im folgenden Beispiel wird ein ServiceHost-Objekt als Host für einen Dienst des Typs HelloWorldService erstellt, und dann wird die Open-Methode der ServiceHost-Instanz aufgerufen. Im Code wird eine Basisadresse bereitgestellt, die Metadatenveröffentlichung ist aktiviert, und Standardendpunkte werden verwendet.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Description;

namespace SelfHost
{
    [ServiceContract]
    public interface IHelloWorldService
    {
        [OperationContract]
        string SayHello(string name);
    }

    public class HelloWorldService : IHelloWorldService
    {
        public string SayHello(string name)
        {
            return string.Format("Hello, {0}", name);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Uri baseAddress = new Uri("http://localhost:8080/hello");

            // Create the ServiceHost.
            using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
            {
                // Enable metadata publishing.
                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                smb.HttpGetEnabled = true;
                smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
                host.Description.Behaviors.Add(smb);

                // Open the ServiceHost to start listening for messages. Since
                // no endpoints are explicitly configured, the runtime will create
                // one endpoint per base address for each service contract implemented
                // by the service.
                host.Open();

                Console.WriteLine("The service is ready at {0}", baseAddress);
                Console.WriteLine("Press <Enter> to stop the service.");
                Console.ReadLine();

                // Close the ServiceHost.
                host.Close();
            }
        }
    }
}


Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft