(0) exportieren Drucken
Alle erweitern

Schritt 7:Implementieren des WCF-Clients für den Aufruf von Service Bus

Letzte Aktualisierung: Juni 2014

Dies ist die letzte von sieben Aufgaben, die erforderlich sind, um einen Servicebus-Basisdienst sowie einen Client zu erstellen, der den Dienst aufrufen kann.Eine Übersicht über alle sieben Aufgaben finden Sie im Lernprogramm zu Service Bus-Relaymessaging.

In diesem Thema wird beschrieben, wie eine Clientbasisanwendung implementiert wird, die auf den Dienst zugreift, der zuvor in diesem Lernprogramm erstellt wurde.Ähnlich wie der Dienst führt der Client viele derselben Vorgänge aus, um auf Servicebus zuzugreifen:

  1. Festlegen des Verbindungsmodus.

  2. Erstellen des URIs, der den Hostdienst ermittelt.

  3. Definieren der Sicherheitsanmeldeinformationen.

  4. Anwenden der Anmeldeinformationen auf die Verbindung.

  5. Öffnen der Verbindung.

  6. Ausführen der anwendungsspezifischen Aufgaben.

  7. Schließen der Verbindung.

Einer der Hauptunterschiede besteht jedoch darin, dass die Clientanwendung einen Kanal für die Verbindung mit Servicebus verwendet, während der Dienst einen Aufruf an ServiceHost benutzt.Der für diese Aufgaben verwendete Code wird im auf das Verfahren folgende Beispiel bereitgestellt.

Zeit bis zum Abschließen des Vorgangs:15 Minuten

  1. Legen Sie den Verbindungsmodus auf AutoDetect fest.

    Fügen Sie in der Methode Main() der Clientanwendung den folgenden Code hinzu.

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
    
  2. Definieren Sie Variablen zum Speichern der Werte für den Dienstnamespace, den Ausstellernamen und den Austellerschlüssel, die aus der Konsole 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();
    
    
    
  3. Erstellen Sie den URI, der den Speicherort des Hosts in Ihrem Servicebus-Projekt definiert.

    Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");
    
    
  4. Erstellen Sie das Anmeldeinformationenobjekt für Ihren Dienstnamespace-Endpunkt:

    TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
    sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);
    
  5. Erstellen Sie die Kanalfactory, die die Konfiguration lädt, die in der Datei App.config beschrieben wird.

    ChannelFactory<IEchoChannel> channelFactory = new ChannelFactory<IEchoChannel>("RelayEndpoint", new EndpointAddress(serviceUri));
    

    Eine Kanalfactory ist ein WCF-Objekt, das einen Kanal erstellt, über den der Dienst und Clientanwendungen kommunizieren.

  6. Wenden Sie die Servicebus-Anmeldeinformationen an.

    channelFactory.Endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
    
  7. Erstellen und öffnen Sie den Kanal zum Dienst.

    IEchoChannel channel = channelFactory.CreateChannel();
    channel.Open();
    
  8. Schreiben Sie die grundlegende Benutzeroberfläche und die Funktionen für das Echo.

    Console.WriteLine("Enter text to echo (or [Enter] to exit):");
    string input = Console.ReadLine();
    while (input != String.Empty)
    {
        try
        {
            Console.WriteLine("Server echoed: {0}", channel.Echo(input));
        }
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.Message);
        }
        input = Console.ReadLine();
    }
    

    Beachten Sie, dass der Code die Instanz des Kanalobjekts als Proxy für den Dienst verwendet.

  9. Schließen Sie den Kanal, und schließen Sie dann die Factory.

    channel.Close();
    channelFactory.Close();
    

  1. Drücken Sie F6, um die Lösung zu erstellen.

    Auf diese Weise werden das Clientprojekt und das Dienstprojekt erstellt, die Sie in einem früheren Schritt dieses Lernprogramms erstellt haben. Außerdem wird für beide Projekte eine ausführbare Datei erstellt.

  2. Bevor Sie die Clientanwendung ausführen, stellen Sie sicher, dass die Dienstanwendung ausgeführt wird.

    Sie sollten nun über eine ausführbare Datei für die Echodienstanwendung namens EchoService.exe verfügen, die unter Ihrem Dienstprojektordner unter \bin\Debug\EchoService.exe (für die Debugkonfiguration) oder \bin\Release\EchoService.exe (für die Veröffentlichungskonfiguration) gespeichert ist.Doppelklicken Sie auf diese Datei, um die Dienstanwendung zu starten.

  3. Ein Konsolenfenster wird geöffnet, und Sie werden aufgefordert, den Dienstnamespace anzugeben.Geben Sie den Dienstnamespace in dieses Konsolenfenster ein, und drücken Sie dann die EINGABETASTE.

  4. Im nächsten Schritt werden Sie aufgefordert, Ihren Ausstellernamen einzugeben.Geben Sie den Ausstellernamen ein, und drücken Sie dann die EINGABETASTE.

  5. Nachdem Sie den Ausstellernamen eingegeben haben, geben Sie den Ausstellerschlüssel ein, und drücken Sie dann die EINGABETASTE.

    Das folgende Beispiel zeigt eine Ausgabe aus dem Konsolenfenster.Beachten Sie, dass die hier bereitgestellten Werte nur Beispiele sind.

    Ihr Dienstnamespace:eigenerNamespace
    Ihr Ausstellername:Besitzer
    Ihr Ausstellerschlüssel:1deCBMEhx/RV3bgwIhCohqdtzj/ZG2WnyC1cLhHTpk4=

    Die Dienstanwendung wird gestartet und gibt die abgehörte Adresse wie im folgenden Beispiel gezeigt im Konsolenfenster aus.

    Dienstadresse:sb://eigenernamespace.servicebus.windows.net/EchoService/
    Drücken Sie zum Beenden die EINGABETASTE.
  6. Führen Sie die Clientanwendung aus.

    Sie sollten nun über eine ausführbare Datei für die Echoclientanwendung namens EchoClient.exe verfügen, die unter Ihrem Clientprojektverzeichnis unter \bin\Debug\EchoClient.exe (für die Debugkonfiguration) oder .\bin\Release\EchoClient.exe (für die Veröffentlichungskonfiguration) gespeichert ist.Doppelklicken Sie auf diese Datei, um die Clientanwendung zu starten.

  7. Ein Konsolenfenster wird geöffnet, und Sie werden zur Eingabe der gleichen Informationen aufgefordert, die Sie zuvor für die Dienstanwendung eingegeben haben.Führen Sie die zuvor beschriebenen Schritte aus, um die gleichen Werte für die Clientanwendung für die Dienstnamespace, den Ausstellernamen und den Ausstellerschlüssel einzugeben.

  8. Nachdem Sie diese Werte eingegeben haben, öffnet der Client einen Kanal zum Dienst und fordert Sie auf, Text einzugeben. Das folgende Beispiel für die Konsolenausgabe zeigt dies.

    Text für Echo eingeben (oder zum Beenden EINGABETASTE drücken):

    Geben Sie Text ein, der an die Dienstanwendung gesendet wird, und drücken Sie dann die EINGABETASTE.

    Dieser Text wird über den Echo-Dienstvorgang an den Dienst gesendet. Er wird im Dienstkonsolenfenster ähnlich wie in der folgenden Beispielausgabe angezeigt.

    Echo:Eigener Beispieltext

    Die Clientanwendung empfängt den Rückgabewert des Echo-Vorgangs (den ursprünglichen Text) und gibt diesen in ihrem Konsolenfenster aus.Das folgende Beispiel zeigt eine Ausgabe aus dem Clientkonsolenfenster.

    Serverecho:Eigener Beispieltext
  9. Sie können auf diese Weise weitere Textnachrichten vom Client an den Dienst senden.Wenn Sie fertig sind, drücken Sie die EINGABETASTE in den Client- und Dienstkonsolenfenstern, um beide Anwendungen zu beenden.

Beispiel

Das folgende Beispiel zeigt, wie eine Clientanwendung erstellt wird, wie der Betrieb des Diensts aufgerufen wird und wie der Client geschlossen wird, nachdem der Betriebsaufruf abgeschlossen wurde.

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

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

    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();

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

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

            ChannelFactory<IEchoChannel> channelFactory = new ChannelFactory<IEchoChannel>("RelayEndpoint", new EndpointAddress(serviceUri));

            channelFactory.Endpoint.Behaviors.Add(sharedSecretServiceBusCredential);

            IEchoChannel channel = channelFactory.CreateChannel();
            channel.Open();

            Console.WriteLine("Enter text to echo (or [Enter] to exit):");
            string input = Console.ReadLine();
            while (input != String.Empty)
            {
                try
                {
                    Console.WriteLine("Server echoed: {0}", channel.Echo(input));
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error: " + e.Message);
                }
                input = Console.ReadLine();
            }

            channel.Close();
            channelFactory.Close();

        }
    }
}

Stellen Sie sicher, dass der Dienst ausgeführt wird, bevor Sie den Client starten.Weitere Informationen finden Sie unter Schritt 4:Hosten und Ausführen eines Basiswebdiensts für die Registrierung bei Service Bus.

Sicherheit

Anzeigen:
© 2014 Microsoft