Exportar (0) Imprimir
Expandir Tudo

Como: Configurar um serviço do Barramento do Serviço de forma programática

Atualizado: janeiro de 2015

Depois que a sua interface tenha sido definida e implementada no serviço do Barramento do Serviço em seu código, será possível iniciar a configuração do seu aplicativo. Note que configurar um aplicativo do Barramento do Serviço é muito semelhante à configuração de um aplicativo do Windows Communication Foundation (WCF), conforme descrito em Configuring Services na documentação do WCF. Sendo assim, este tópico contém um procedimento simplificado para configuração de um aplicativo do Barramento do Serviço e também uma discussão sobre a configuração específica para o Barramento do Serviço.

Além dos problemas discutidos em Configurar um serviço WCF para se registrar no Barramento do Serviço, um serviço do Barramento do Serviço deve determinar que tipo de autenticação e segurança de transporte, se houver, será necessário. A segurança de autenticação é o tipo de segurança necessária para que o serviço se conecte ao Barramento do Serviço. Um serviço precisa sempre apresentar credenciais de autenticação ao Barramento do Serviço, normalmente na forma de um token de segredo compartilhado (ou seja, nome e segredo do emissor). No entanto, o serviço também determina o tipo de credenciais de autenticação do cliente que os aplicativos cliente devem usar para se conectar ao serviço. Por padrão, a autenticação de clientes é definida como RelayClientAuthenticationType.RelayAccessToken, o que significa que o cliente precisa apresentar alguma forma de autenticação ao Barramento do Serviço. Na versão atual do Barramento do Serviço, isso é sempre outro token de segredo compartilhado. Por outro lado, a segurança de transporte determina se ele deve se conectar a algum tipo de linha segura. Isso é chamado de segurança de “ponta a ponta”, porque cobre toda a conexão entre o serviço, o Barramento do Serviço e o cliente. Por outro lado, a autenticação de clientes cobre apenas as relações necessárias para a conexão do serviço ao Barramento do Serviço. Por padrão, a segurança de transporte é definida como EndToEndSecurityMode.Transport. Isso significa que a segurança é fornecida usando algum tipo de transporte seguro, como HTTPS. É recomendável que você mantenha o modo de segurança de ponta a ponta definido como Transport, a menos que tenha um motivo convincente para alterá-lo, porque isso pode reduzir a segurança do seu aplicativo. Para obter mais informações sobre as configurações de segurança, consulte Segurança e autenticação de uma conexão do Barramento do Serviço.

O procedimento a seguir descreve como configurar um serviço do Barramento do Serviço de forma programática.

  1. Crie o URI do ponto de extremidade que inclui seu tipo de esquema e nome do namespace de serviço.

    string serviceNamespace = "myServiceNamespace";
    Uri uri = ServiceBusEnvironemnt.CreateServiceUri("sb", serviceNamespace, "sample/log/";
    
    

    O prefixo “sb” indica que esse URI usa o esquema do Barramento do Serviço. Outros esquemas incluem HTTP ou HTTPS.

  2. Crie uma instância do host com o contrato e o URI.

    host = new ServiceHost(typeof(EchoService), uri);
    
  3. Declare e implemente o tipo de credenciais de autenticação a serem usadas.

    string issuerName = "MY ISSUER NAME"
    string issuerSecret = "MY SECRET";
    TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
    sharedSecretServiceBusCredential.CredentialType = TransportClientCredentialType.SharedSecret;
    sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerName = issuerName;
    sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerSecret = issuerSecret;
    

    Todos os serviços são necessários para o uso das credenciais de autenticação na conexão ao Barramento do Serviço. Observe que codificar o segredo e o nome do emissor em seu código não é uma prática segura. Por exemplo, muitos dos Exemplos de barramento de serviço solicitam ao usuário essas informações.

  4. Declare o tipo e a instância do contrato.

    ContractDescription contractDescription = ContractDescription.GetContract(typeof(IEchoContract), typeof(EchoService));
    
  5. Adicione a descrição do contrato ao ponto de extremidade do serviço.

    ServiceEndpoint serviceEndPoint = new ServiceEndpoint(contractDescription);
    
  6. Adicione o URI ao ponto de extremidade do serviço.

    serviceEndPoint.Address = new EndpointAddress(uri);
    
  7. Declare o tipo de associação a ser usada para o ponto de extremidade.

    serviceEndPoint.Binding = new NetTcpRelayBinding();
    

    Agora, você pode declarar o modo Authentication e EndToEndSecurity. Esse exemplo específico usa o construtor padrão, que define o EndToEndSecurityMode como Transport e o RelayClientAuthenticationType como RelayAccessToken. Por isso, o trecho a seguir é idêntico ao construtor padrão, exceto por definir explicitamente aqueles dois parâmetros:

    serviceEndPoint.Binding = new NetTcpRelayBinding(EndToEndSecurityMode.Transport, RelayClientAuthenticationType.RelayAccessToken);
    
  8. Adicione as credenciais de segurança ao ponto de extremidade.

    serviceEndpoint.Behaviors.Add(sharedSecretServiceBusCredential);
    

    Essas credenciais de segurança são necessárias para que todos os serviços se autentiquem com o Barramento do Serviço. Por termos definido o RelayClientAuthenticationType como RelayAccessToken (seja por padrão ou explicitamente), qualquer aplicativo cliente precisará usar o mesmo tipo de credenciais de autenticação.

  9. Adicione o ponto de extremidade ao host.

    host.Description.Endpoints.Add(serviceEndPoint);
    

    Você criou a configuração mínima necessária para um aplicativo de serviço do Barramento do Serviço. Neste ponto, você pode adicionar mais configurações em nível de serviço ou em nível de ponto de extremidade, como você faria com qualquer outro aplicativo do WCF. Para obter mais informações sobre como configurar um aplicativo do WCF, consulte o Configuring Services na documentação do WCF. Depois de concluir a configuração do aplicativo, é possível hospedá-lo e executá-lo. Para obter mais informações, consulte Criando um serviço para o Barramento do Serviço.

Exemplo

O exemplo a seguir mostra como definir de forma programática as informações de configuração. A principal diferença é que todas as informações são definidas de forma programática; no tutorial, algumas informações não específicas do Barramento do Serviço são armazenadas no arquivo App.config.


namespace AzureSample_WorkerRole
{
    public class WorkerRole : RoleEntryPoint
    {
        private ServiceHost host;

        public override void Start()
        {
            string serviceNamespace = "myDomainName";
            string issuerName = "MY ISSUER NAME"
            string issuerSecret = "MY SECRET";

            Uri uri = ServiceBusEnvironemnt.CreateServiceUri("sb", serviceNamespace, "sample/log/";
            
            host = new ServiceHost(typeof(EchoService), uri);

            TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
            sharedSecretServiceBusCredential.CredentialType = TransportClientCredentialType.SharedSecret;
            sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerName = issuerName;
            sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerSecret = issuerSecret;

            ContractDescription contractDescription = ContractDescription.GetContract(typeof(IEchoContract), typeof(EchoService));

            ServiceEndpoint serviceEndPoint = new ServiceEndpoint(contractDescription);
            serviceEndPoint.Address = new EndpointAddress(uri);
            
            serviceEndPoint.Binding = new NetTcpRelayBinding();
            
           serviceEndpoint.Behaviors.Add(sharedSecretServiceBusCredential);
            host.Description.Endpoints.Add(serviceEndPoint);

            host.Open();

            while (true)
            {
                //Loop
            }
        }

        public override void Stop()
        {
            host.Close();
            base.Stop();
        }

        public override RoleStatus GetHealthStatus()
        {
            // This is a sample worker implementation. Replace with your logic.
            return RoleStatus.Healthy;
        }
    }
}

Mostrar:
© 2015 Microsoft