(0) exportieren Drucken
Alle erweitern

Schritt 4:Hosten und Ausführen eines Basiswebdiensts für die Registrierung bei Service Bus

Letzte Aktualisierung: Juni 2014

Dies ist die vierte von sieben Aufgaben, die erforderlich sind, um eine Servicebus-Dienstanwendung sowie einen Client zu erstellen, der den Dienst aufrufen kann.Eine Übersicht über alle sechs Aufgaben finden Sie im Lernprogramm zu Service Bus-Relaymessaging.In diesem Thema wird beschrieben, wie Servicebus-Basisdienst ausgeführt wird.

Eine vollständige Liste des in dieser Aufgabe geschriebenen Codes finden Sie im Beispiel, das auf das Verfahren folgt.

Geschätzte Zeit bis zum Abschließen des Vorgangs:10 Minuten

  1. Fügen Sie dem Projekt einen Verweis auf Microsoft.ServiceBus.dll hinzu:

    1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste unter dem Projektordner auf Verweise, und klicken Sie dann auf Verweis hinzufügen.

    2. Wählen Sie die Registerkarte .NET im Dialogfeld Verweis hinzufügen aus, und führen Sie dann einen Bildlauf nach unten durch, bis Microsoft.ServiceBus angezeigt wird.Sie können auch auf Durchsuchen klicken und dann auf Ihrer Festplatte zur Assembly navigieren.Diese befindet sich normalerweise im Ordner Programme\<SDKInstallationsverzeichnis>\v1.0\Assemblies\NET4.0. Wählen Sie die Assembly Microsoft.ServiceBus aus, und klicken Sie dann auf OK.

    noteHinweis
    Wenn Sie einen Befehlszeilencompiler (z. B. Csc.exe) verwenden, müssen Sie außerdem den Pfad der Assemblys zur Verfügung stellen.

  2. Fügen Sie in Program.cs eine Anweisung using für den Namespace Microsoft.ServiceBus hinzu.

    using Microsoft.ServiceBus;
    

    Microsoft.ServiceBus ist der Namespace mit APIs, mit denen Sie programmgesteuert auf viele der Kernfeatures von Servicebus zugreifen können.Wahrscheinlich verwenden Sie diesen Namespace in allen Servicebus-Anwendungen.

  3. Erstellen Sie in der Methode Main() drei Variablen zum Speichern des Dienstnamespaces, des Ausstellernamens und des Austellerschlüssels (Anmeldeinformationen, die aus einem Namen und einem Kennwort bestehen), die aus dem Konsolenfenster gelesen werden.

    Console.Write("Your Service Namespace: ");
    string serviceNamespace = Console.ReadLine();
    Console.Write("Your Issuer Name: ");
    string issuerName = Console.ReadLine();
    Console.Write("Your Issuer Secret: ");
    string issuerSecret = Console.ReadLine();
    

    Der Ausstellername und der Ausstellerschlüssel werden später verwendet, um auf das Servicebus-Projekt zuzugreifen.Der Dienstnamespace wird als Parameter an CreateServiceUri übergeben, um einen Dienst-URI zu erstellen.

  4. Deklarieren Sie mithilfe eines TransportClientEndpointBehavior-Objekts, dass ein gemeinsamer geheimer Schlüssel als Anmeldeinformationentyp verwendet wird.Fügen Sie den folgenden Code direkt unter dem Code hinzu, den Sie im letzten Schritt hinzugefügt haben:

    TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
    sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);
    

  1. Erstellen Sie hinter dem Code, den Sie im letzten Schritt eingefügt haben, eine Uri-Instanz für die Basisadresse des Diensts.Dieser URI gibt das Servicebus-Schema, den Dienstnamespace und den Pfad der Dienstschnittstelle an.

    Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");
    

    “sb” ist eine Abkürzung für das Servicebus-Schema und zeigt an, dass TCP als Protokoll verwendet wird.Dies wurde bereits in der Konfigurationsdatei durch Angeben von NetTcpRelayBinding als Bindung festgelegt.

    Für dieses Lernprogramm lautet der URI sb://putServiceNamespaceHere.windows.net/EchoService.

  1. Legen Sie den Verbindungsmodus auf AutoDetect fest.

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
    

    Der Verbindungsmodus beschreibt das Protokoll, das der Dienst für die Kommunikation mit Servicebus verwendet: HTTP oder TCP.Mithilfe der Standardeinstellung AutoDetect versucht der Dienst, eine Verbindung mit Servicebus über TCP herzustellen, wenn verfügbar. Wenn TCP nicht verfügbar ist, wird HTTP verwendet.Beachten Sie, dass sich diese Vorgehensweise von dem Protokoll unterscheidet, das der Dienst für die Clientkommunikation angibt.Dieses Protokoll wird durch die verwendete Bindung festgelegt.Ein Dienst kann z. B. die Bindung BasicHttpRelayBinding verwenden, die angibt, dass ihr Endpunkt (unter Servicebus bereitgestellt) mit Clients über HTTP kommuniziert.Dieser selbe Dienst kann ConnectivityMode.AutoDetect angeben, sodass der Dienst mit Servicebus über TCP kommuniziert.

  2. Erstellen Sie den Diensthost mithilfe des URIs, der zuvor in diesem Abschnitt erstellt wurde.

    ServiceHost host = new ServiceHost(typeof(EchoService), address);
    

    Der Diensthost ist das WCF-Objekt, das den Dienst instanziiert.Hier wird der Diensttyp übergeben, den Sie erstellen möchten (ein EchoService-Typ), sowie die Adresse, unter der der Dienst bereitgestellt werden soll.

  3. Fügen Sie am Anfang der Datei Program.cs Verweise auf System.ServiceModel.Description und Microsoft.ServiceBus.Description hinzu.

    using System.ServiceModel.Description;
    using Microsoft.ServiceBus.Description;
    
  4. Konfigurieren Sie in Main() den Endpunkt, um öffentlichen Zugriff zu ermöglichen.

    IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);
    

    Durch diesen Schritt wird Servicebus informiert, dass Ihre Anwendung öffentlich durch Untersuchen des Servicebus-ATOM-Feeds in Ihrem Projekt angezeigt werden kann.Wenn Sie DiscoveryType auf private festlegen, ist ein Client trotzdem in der Lage, auf den Dienst zuzugreifen.Der Dienst wird jedoch nicht angezeigt, wenn der Servicebus-Namespace durchsucht wird.Der Client muss unter diesem Umständen den Endpunktpfad im Vorfeld kennen.Weitere Informationen finden Sie unter Erkennen und Bereitstellen von Service Bus Service.

  5. Wenden Sie die Dienstanmeldeinformationen auf die in der Datei App.config definierten Dienstendpunkte an:

    foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
    {
        endpoint.Behaviors.Add(serviceRegistrySettings);
        endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
    }
    

    Wie bereits im vorherigen Schritt erwähnt wurde, können Sie mehrere Dienste und Endpunkte in der Konfigurationsdatei deklarieren.Wenn dies der Fall ist, durchsucht der Code die Konfigurationsdatei nach jedem Endpunkt, auf den die Anmeldeinformationen angewendet werden sollen.Für dieses Lernprogramm weist die Konfigurationsdatei jedoch nur einen Endpunkt auf.

  1. Öffnen Sie den Dienst.

    host.Open();
    
  2. Informieren Sie den Benutzer, dass der Dienst ausgeführt wird, und erläutern Sie, wie der Dienst heruntergefahren wird.

    Console.WriteLine("Service address: " + address);
    Console.WriteLine("Press [Enter] to exit");
    Console.ReadLine();
    
  3. Wenn Sie fertig sind, schließen Sie den Diensthost.

    host.Close();
    
  4. Drücken Sie F6, um das Projekt zu erstellen.

Beispiel

Das folgende Beispiel verwendet den Dienstvertrag und die -implementierung aus früheren Schritten im Lernprogramm. Der Dienst wird in einer Konsolenanwendung gehostet.Kompilieren Sie den folgenden Code in eine ausführbare Datei namens EchoService.exe.

using System;
using System.ServiceModel;
using System.ServiceModel.Description;
using Microsoft.ServiceBus;
using Microsoft.ServiceBus.Description;

namespace Microsoft.ServiceBus.Samples
{
    [ServiceContract(Name = "IEchoContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]

    public interface IEchoContract
    {
        [OperationContract]
        String Echo(string text);
    }

    public interface IEchoChannel : IEchoContract, IClientChannel { };

    [ServiceBehavior(Name = "EchoService", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]

    class EchoService : IEchoContract
    {
        public string Echo(string text)
        {
            Console.WriteLine("Echoing: {0}", text);
            return text;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {

            ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;

            
            
            Console.Write("Your Service Namespace: ");
            string serviceNamespace = Console.ReadLine();
            Console.Write("Your Issuer Name: ");
            string issuerName = Console.ReadLine();
            Console.Write("Your Issuer Secret: ");
            string issuerSecret = Console.ReadLine();

           // Create the credentials object for the endpoint.
            TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
            sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);


            // Create the service URI based on the service namespace.
            Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");

            // Create the service host reading the configuration.
            ServiceHost host = new ServiceHost(typeof(EchoService), address);

            // Create the ServiceRegistrySettings behavior for the endpoint.
            IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);

            // Add the Service Bus credentials to all endpoints specified in configuration.
            foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
            {
                endpoint.Behaviors.Add(serviceRegistrySettings);
                endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
            }
            
            // Open the service.
            host.Open();

            Console.WriteLine("Service address: " + address);
            Console.WriteLine("Press [Enter] to exit");
            Console.ReadLine();

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

Nachdem die Schnittstelle jetzt erstellt ist, fahren Sie mit Schritt 5:Erstellen eines WCF-Clients für den Dienstvertrag fort, um die Schnittstelle zu implementieren.

Anzeigen:
© 2014 Microsoft