Esporta (0) Stampa
Espandi tutto

Passaggio 7: Implementare il client WCF per la chiamata di Service Bus

Aggiornamento: giugno 2014

Questa è l'ultima di sette attività necessarie per creare un servizio di Service Bus di base e un client in grado di chiamare il servizio. Per una panoramica delle sette attività, vedere Esercitazione sulla messaggistica inoltrata di Service Bus.

In questo argomento viene descritto come implementare un'applicazione client di base per l'accesso al servizio creato precedentemente in questa esercitazione. Come per il servizio, il client esegue molte delle stesse operazioni per accedere a Service Bus:

  1. Imposta la modalità di connettività.

  2. Crea l'URI che definisce la posizione del servizio host.

  3. Definisce le credenziali di sicurezza.

  4. Applica le credenziali alla connessione.

  5. Apre la connessione.

  6. Esegue le attività specifiche dell'applicazione.

  7. Chiude la connessione.

Una delle differenze principali tuttavia consiste nell'uso nell'applicazione client di un canale per la connessione a Service Bus, mentre nel servizio viene usata una chiamata a ServiceHost. Il codice usato per eseguire queste attività viene fornito nell'esempio dopo la procedura.

Tempo per il completamento: 15 minuti

  1. Impostare la modalità di connettività su AutoDetect.

    Aggiungere il seguente codice nel metodo Main() dell'applicazione client.

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
    
  2. Definire variabili per includere i valori per lo spazio dei nomi servizio, il nome dell'autorità emittente e la chiave privata dell'autorità emittente che vengono letti a partire dalla console.

    
    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. Creare l'URI che definisce la posizione dell'host nel progetto di Service Bus.

    Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");
    
    
  4. Creare l'oggetto credenziali per l'endpoint dello spazio dei nomi servizio.

    TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
    sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);
    
  5. Creare la channel factory che carica la configurazione descritta nel file App.config.

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

    Una channel factory è un oggetto WCF che crea un canale attraverso il quale comunicano le applicazioni di servizio e client.

  6. Applicare le credenziali di Service Bus.

    channelFactory.Endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
    
  7. Creare e aprire il canale al servizio.

    IEchoChannel channel = channelFactory.CreateChannel();
    channel.Open();
    
  8. Scrivere l'interfaccia utente e le funzionalità di base per l'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();
    }
    

    Si noti che nel codice viene usata l'istanza dell'oggetto canale come proxy del servizio.

  9. Chiudere il canale e chiudere la factory.

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

  1. Premere F6 per creare la soluzione.

    In questo modo verranno compilati sia il progetto client sia il progetto di servizio creati in un passaggio precedente dell'esercitazione e verrà creato un file eseguibile per ciascuno.

  2. Prima di eseguire l'applicazione client, verificare che sia in esecuzione l'applicazione di servizio.

    Si disporrà ora di un file eseguibile per l'applicazione di servizio Echo denominato EchoService.exe e contenuto nella cartella del progetto di servizio in \bin\Debug\EchoService.exe (per la configurazione per il debug) o in \bin\Release\EchoService.exe (per la configurazione per il rilascio). Fare doppio clic su questo file per avviare l'applicazione di servizio.

  3. Verrà aperta una finestra della console in cui verrà chiesto di specificare lo spazio dei nomi servizio. Nella finestra della console immettere lo spazio dei nomi servizio e premere INVIO.

  4. Verrà chiesto quindi di specificare il nome dell'autorità emittente. Immettere il nome dell'autorità emittente e premere INVIO.

  5. Dopo aver immesso il nome dell'autorità emittente, immettere la chiave privata dell'autorità emittente e premere INVIO.

    Viene riportato di seguito un output di esempio della finestra della console. Si noti che i valori specificati vengono forniti esclusivamente a scopo esemplificativo.

    Your Service Namespace: myNamespace
    Your Issuer Name: owner
    Your Issuer Secret: 1deCBMEhx/RV3bgwIhCohqdtzj/ZG2WnyC1cLhHTpk4=

    L'applicazione di servizio si avvia e visualizza l'indirizzo su cui è in attesa nella finestra della console, come indicato nel seguente esempio.

    Service address: sb://mynamespace.servicebus.windows.net/EchoService/
    Press [Enter] to exit
  6. Eseguire l'applicazione client.

    Si disporrà ora di un file eseguibile per l'applicazione client Echo denominato EchoClient.exe e contenuto nella directory del progetto client in .\bin\Debug\EchoClient.exe (per la configurazione per il debug) o in .\bin\Release\EchoClient.exe (per la configurazione per il rilascio). Fare doppio clic su questo file per avviare l'applicazione client.

  7. Verrà visualizzata una finestra della console in cui viene chiesto di immettere le stesse informazioni specificate precedentemente per l'applicazione di servizio. Effettuare le operazioni descritte precedentemente per immettere gli stessi valori di spazio dei nomi servizio, nome dell'autorità emittente e chiave privata dell'autorità emittente per l'applicazione client.

  8. Dopo aver immesso questi valori, il client apre un canale per il servizio e richiede di immettere il testo, come illustrato nel seguente esempio di output della console.

    Enter text to echo (or [Enter] to exit): 

    Immettere il testo da inviare all'applicazione di servizio e premere INVIO.

    Il testo verrà inviato al servizio tramite l'operazione di servizio Echo e verrà visualizzato nella finestra della console del servizio come nel seguente output di esempio.

    Echoing: My sample text

    L'applicazione client riceverà il valore restituito dell'operazione Echo, che corrisponde al testo originale, e lo visualizzerà nella finestra della console. Viene riportato di seguito un output di esempio della finestra della console del client.

    Server echoed: My sample text
  9. È possibile continuare a inviare messaggi di testo dal client al servizio in questo modo. Al termine, premere INVIO nelle finestre della console del client e del servizio per terminare entrambe le applicazioni.

Esempio

Nel seguente esempio viene illustrato come creare un'applicazione client, chiamare le operazioni del servizio e chiudere il client al termine della chiamata delle operazioni.

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

        }
    }
}

Verificare che il servizio sia in esecuzione prima di avviare il client. Per altre informazioni, vedere Passaggio 4: Ospitare ed eseguire un servizio Web di base per la registrazione con Service Bus.

Sicurezza

Mostra:
© 2014 Microsoft