Exportar (0) Imprimir
Expandir Tudo

Etapa 4: Hospedar e executar um serviço Web básico para registrar no Service Bus

Atualizado: junho de 2014

Essa é a quarta de sete tarefas necessárias para criar um aplicativo de serviço Service Bus básico e um cliente que possa chamar o serviço. Para ter uma visão geral de todas as seis tarefas, consulte o tópico Tutorial do sistema de mensagens retransmitido pelo Service Bus. Esse tópico descreve como executar um serviço básico do Service Bus.

Uma listagem completa do código escrito nessa tarefa é fornecida no exemplo após o procedimento.

Tempo estimado para conclusão: 10 minutos

Criar as credenciais do Service Bus

  1. Adicione uma referência a Microsoft.ServiceBus.dll ao projeto:

    1. Em Solution Explorer, clique com o botão direito do mouse na pasta Referências na pasta do projeto e clique em Adicionar Referência.

    2. Selecione a guia .NET na caixa de diálogo Adicionar Referência e role para baixo até ver Microsoft.ServiceBus. Ou clique em Procurar e acesse o assembly na sua unidade de disco rígido. Isso costuma estar em Arquivos de Programas\<sdkInstallDirectory>\v1.0\Assemblies\NET4.0. Selecione o assembly Microsoft.ServiceBus e clique OK.

    noteObservação
    Ao usar um compilador de linha de comando (por exemplo, Csc.exe), também é preciso fornecer o caminho dos assemblies.

  2. No Program.cs, adicione uma declaração using para o namespace Microsoft.ServiceBus.

    using Microsoft.ServiceBus;
    

    Microsoft.ServiceBus é o namespace contendo APIs que permite acessar de forma programática muitos dos principais recursos do Service Bus. Você provavelmente usará este namespace em todos os seus aplicativos Service Bus.

  3. No método Main(), crie três variáveis para armazenar o namespace de serviço, nome do emissor e segredo do emissor (uma credencial de nome/senha) que são lidos da janela 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();
    

    O nome do emissor e segredo do emissor serão usados posteriormente para acessar seu projeto do Service Bus. O namespace de serviço é passado como um parâmetro para o CreateServiceUri para criar um URI de serviço.

  4. Usando um objeto TransportClientEndpointBehavior declare que um segredo compartilhado será usado como o tipo de credencial. Adicione o código a seguir diretamente abaixo do código adicionado na última etapa:

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

Para criar um endereço base para o serviço

  1. Seguindo o código adicionado na última etapa, crie uma instância do Uri para o endereço base do serviço. Esse URI especifica o esquema do Service Bus, o namespace de serviço e o caminho da interface do serviço.

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

    “sb” é uma abreviação do esquema do Service Bus e indica que TCP está sendo usado como protocolo. Isso também foi indicado no arquivo de configuração, quando NetTcpRelayBinding foi especificado como a associação.

    Para este tutorial, o URI será sb://putServiceNamespaceHere.windows.net/EchoService.

Criar e configurar um host de serviço

  1. Defina o modo de conectividade para AutoDetect.

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
    

    O modo de conectividade descreve o protocolo que o serviço usa para se comunicar com o Service Bus; seja HTTP ou TCP. Usando a configuração padrão AutoDetect, o serviço tentará se conectar ao Service Bus por TCP, se estiver disponível, e HTTP se TCP não estiver disponível. Observe que isso difere do protocolo especificado pelo serviço para comunicação do cliente. Este é determinado pela associação usada. Por exemplo, um serviço pode usar a associação BasicHttpRelayBinding, que especifica que o seu ponto de extremidade (exposto no Service Bus) se comunica com clientes por HTTP. O mesmo serviço pode especificar ConnectivityMode.AutoDetect para que ele se comunique com o Service Bus por TCP.

  2. Crie o host de serviço usando o URI criado anteriormente nesta seção.

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

    O host de serviço é o objeto WCF que instancia o serviço. Aqui, você informa o tipo de serviço desejado a ser criado (um tipo EchoService), e o endereço no qual deseja expor o serviço.

  3. Na início do arquivo Program.cs, adicione referências a System.ServiceModel.Description e Microsoft.ServiceBus.Description.

    using System.ServiceModel.Description;
    using Microsoft.ServiceBus.Description;
    
  4. Em Main(), configure o ponto de extremidade para ativar o acesso público.

    IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);
    

    Essa etapa informa ao Service Bus que seu aplicativo pode ser encontrado publicamente ao examinar o feed ATOM do Service Bus do seu projeto. Se você definiu DiscoveryType como particular, um cliente ainda poderá acessar o serviço. Entretanto, o serviço não seria exibido ao procurar pelo namespace do Service Bus. Em vez disso, o cliente teria que saber o caminho do ponto de extremidade de antemão. Para obter mais informações, consulte Descoberta e exposição de um serviço do Service Bus.

  5. Aplique as credenciais do serviço aos pontos de extremidade do serviço definidos no arquivo App.config:

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

    Como dito na etapa anterior, você poderia ter declarado mais de um serviço e ponto de extremidade no arquivo de configuração. Caso o tivesse feito, esse código percorreria o arquivo de configuração e procuraria todos os pontos de extremidade para os quais deveria aplicar suas credenciais. Entretanto, nesse tutorial, o arquivo de configuração possui apenas um ponto de extremidade.

Abrir o host de serviço

  1. Abra o serviço.

    host.Open();
    
  2. Informe ao usuário que o serviço está em execução e explique como desligá-lo.

    Console.WriteLine("Service address: " + address);
    Console.WriteLine("Press [Enter] to exit");
    Console.ReadLine();
    
  3. Ao concluir, feche o host de serviço.

    host.Close();
    
  4. Pressione F6 para criar o projeto.

Exemplo

O exemplo a seguir inclui o contrato de serviço e a implementação de etapas anteriores no tutorial e hospeda o serviço em um aplicativo de console. Compile o código a seguir em um executável chamado 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();
        }
    }
}

Agora que a interface foi criada, proceda com a Etapa 5: Criar um cliente WCF para o contrato de serviço para implantar a interface.

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2014 Microsoft