Exportar (0) Imprimir
Expandir Tudo

Etapa 7: Implementar o cliente WCF para chamar o Service Bus

Atualizado: junho de 2014

Esta é a última de sete tarefas necessárias para criar um serviço Service Bus básico e um cliente que possa chamar o serviço. Para ter uma visão geral de todas as sete tarefas, consulte o tópico Tutorial do sistema de mensagens retransmitido pelo Service Bus.

Este tópico descreve como implementar um aplicativo cliente básico que acessa o serviço criado anteriormente neste tutorial. De forma similar ao serviço, o cliente realiza muitas das mesmas operações para acessar o Service Bus:

  1. Define o modo de conectividade.

  2. Cria o URI que localiza o serviço do host.

  3. Define as credenciais de segurança.

  4. Aplica as credenciais à conexão.

  5. Abre a conexão.

  6. Executa tarefas específicas do aplicativo.

  7. Fecha a conexão.

No entanto, uma das principais diferenças é que o aplicativo cliente usa um canal para se conectar ao Service Bus, enquanto que o serviço usa uma chamada para ServiceHost. O código usado para essas tarefas é fornecido no exemplo que se segue ao procedimento.

Tempo para conclusão: 15 minutos

  1. Defina o modo de conectividade para AutoDetect.

    Adicione o seguinte código dentro do método Main() do aplicativo cliente.

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
    
  2. Defina variáveis para reter os valores do namespace de serviço, nome do emissor e segredo do emissor que são lidos a partir do 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. Crie o URI que define o local do host em seu projeto do Service Bus.

    Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");
    
    
  4. Crie o objeto de credencial para o ponto de extremidade de seu namespace de serviço.

    TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
    sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);
    
  5. Crie a fábrica de canais que carrega a configuração descrita no arquivo App.config.

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

    Uma fábrica de canais é um objeto do WCF que cria um canal por meio do qual os aplicativos do serviço e cliente se comunicam.

  6. Aplique as credenciais do Service Bus.

    channelFactory.Endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
    
  7. Crie e abra o canal para o serviço.

    IEchoChannel channel = channelFactory.CreateChannel();
    channel.Open();
    
  8. Escreva a interface básica do usuário e a funcionalidade para o eco.

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

    Observe que o código usa a instância do objeto do canal como um proxy para o serviço.

  9. Feche o canal e a fábrica.

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

  1. Pressione F6 para criar a solução.

    Isso cria o projeto cliente e o projeto do serviço, que foram criados em uma etapa anterior desse tutorial, e cria um arquivo executável para cada.

  2. Antes de executar o aplicativo cliente, assegure-se de que o aplicativo do serviço esteja em execução.

    Agora, você deverá ter um arquivo executável para o aplicativo do serviço Echo chamado EchoService.exe, localizado sob a pasta de projeto de seu serviço em \bin\Debug\EchoService.exe (para a configuração de depuração) ou \bin\Release\EchoService.exe (para a configuração de versão). Clique duas vezes nesse arquivo para iniciar o aplicativo do serviço.

  3. Uma janela do console será aberta e solicitará o namespace de serviço. Na janela do console, digite o namespace de serviço e pressione ENTER.

  4. A seguir, será solicitado o nome do emissor. Digite o nome do emissor e pressione ENTER.

  5. Depois de digitar o nome do emissor, digite o segredo do emissor e pressione ENTER.

    Eis um exemplo de saída da janela do console. Observe que os valores fornecidos aqui são somente para fins de exemplo.

    Seu namespace do serviço: myNamespace
    Seu nome do emissor: proprietário
    Seu segredo do emissor: 1deCBMEhx/RV3bgwIhCohqdtzj/ZG2WnyC1cLhHTpk4=

    O aplicativo do serviço é iniciado e exibe o endereço no qual está ouvindo na janela do console, como mostra o exemplo a seguir.

    Endereço do serviço: sb://mynamespace.servicebus.windows.net/EchoService/
    Pressione [Enter] para sair
  6. Execute o aplicativo cliente.

    Você deverá ter agora um executável para o aplicativo cliente Echo chamado EchoClient.exe, que está localizado no diretório do projeto cliente em .\bin\Debug\EchoClient.exe (para a configuração de depuração) ou .\bin\Release\EchoClient.exe (para a configuração de versão). Clique duas vezes nesse arquivo para iniciar o aplicativo cliente.

  7. Uma janela do console será aberta e solicitará as mesmas informações digitadas anteriormente para o aplicativo do serviço. Siga as etapas anteriores para informar os mesmos valores para o aplicativo cliente para namespace de serviço, nome do emissor e segredo do emissor.

  8. Depois de inserir esses valores, o cliente abre um canal para o serviço e solicita que você digite algum texto, como mostra o exemplo de saída do console a seguir.

    Digite o texto a exibir (ou [Enter] para sair): 

    Digite algum texto para enviar ao aplicativo do serviço e pressione ENTER.

    Esse texto é enviado para o serviço por meio da operação do serviço Echo e é exibido na janela do console do serviço como no exemplo de saída a seguir.

    Exibindo: Meu texto de amostra

    O aplicativo cliente recebe o valor de retorno da operação Echo, que é o texto original, e o exibe na janela do console. A seguir, está um exemplo de saída da janela do console do cliente.

    O servidor exibiu: Meu texto de amostra
  9. Você pode continuar a enviar mensagens de texto do cliente para o serviço dessa maneira. Ao concluir, pressione ENTER nas janelas do console do cliente e do serviço para encerrar ambos os aplicativos.

Exemplo

O exemplo a seguir mostra como criar um aplicativo cliente, como chamar as operações do serviço e como fechar o cliente depois que a chamada da operação estiver concluída.

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

        }
    }
}

Assegure-se de que o serviço esteja em execução antes de iniciar o cliente. Para obter mais informações, consulte Etapa 4: Hospedar e executar um serviço Web básico para registrar no Service Bus.

Segurança

Mostrar:
© 2014 Microsoft