Экспорт (0) Печать
Развернуть все

Инструкция по программной настройке службы Service Bus

Обновлено: Январь 2015 г.

После определения и реализации интерфейса службы Служебная шина в коде можно настроить приложение. Обратите внимание, что настройка приложения Служебная шина очень похожа на настройку приложения Windows Communication Foundation (WCF), как описано в разделе Configuring Services в документации WCF. Соответственно, здесь приводится упрощенная процедура настройки приложения Служебная шина и описание соответствующих параметров Служебная шина.

Кроме проблем, описанных в разделе Настройка регистрации службы WCF в Service Bus, служба Служебная шина должна определить, какой тип проверки подлинности и безопасности транспорта требуется. Безопасность проверки подлинности — это тип безопасности, необходимый для подключения службы к Служебная шина. Служба всегда должна предоставлять Служебная шина учетные данные проверки подлинности, которые обычно имеют форму маркера общего секрета (то есть имени поставщика и секрета). Однако служба также определяет, какой тип учетных данных проверки подлинности должно использовать клиентское приложение для подключения к службе. По умолчанию для клиентской проверки подлинности задано значение RelayClientAuthenticationType.RelayAccessToken, то есть клиент должен предоставить Служебная шина некоторую форму проверки подлинности. В текущей версии Служебная шина это всегда другой маркер общего секрета. Для сравнения безопасность транспорта определяет необходимость подключения с использованием некоторой формы безопасной линии. Это называется "сквозной" безопасностью, так как она распространяется на все подключение между службой — Служебная шина — и клиентом. Для сравнения: клиентская проверка подлинности охватывает только требуемое отношение для подключения из службы к Служебная шина. По умолчанию безопасность транспорта задана как EndToEndSecurityMode.Transport. Это значит, что безопасность обеспечивается с использованием некоторой формы безопасного транспорта, такого как HTTPS. Рекомендуется задать для режима сквозной безопасности значение Transport, если у вас нет веской причины изменить его, поскольку это может снизить безопасность приложения. Дополнительные сведения параметрах приложения см. в разделе Обеспечение безопасности и проверка подлинности подключения Service Bus.

В следующей процедуре описано, как настроить службу Служебная шина программным способом.

  1. Создайте URI конечной точки, включающий имя вашего пространство имен службы и тип схемы.

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

    Префикс "sb" указывает, что этот URI использует схему Служебная шина. Другие схемы — HTTP или HTTPS.

  2. Создайте экземпляр узла по контракту и URI.

    host = new ServiceHost(typeof(EchoService), uri);
    
  3. Объявите и реализуйте тип используемых для проверки подлинности учетных данных.

    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;
    

    Все службы должны использовать для подключения к Служебная шина учетные данные проверки подлинности. Учтите, что запись имени издателя и секрета в коде небезопасна. Например, многие Примеры сервисной шины предоставляют пользователю эти сведения.

  4. Объявите тип и экземпляр контракта.

    ContractDescription contractDescription = ContractDescription.GetContract(typeof(IEchoContract), typeof(EchoService));
    
  5. Добавьте описание контракта в конечную точку службы.

    ServiceEndpoint serviceEndPoint = new ServiceEndpoint(contractDescription);
    
  6. Добавьте URI в конечную точку службы.

    serviceEndPoint.Address = new EndpointAddress(uri);
    
  7. Объявите тип привязки, используемый для конечной точки.

    serviceEndPoint.Binding = new NetTcpRelayBinding();
    

    Здесь можно объявить режим Authentication и EndToEndSecurity. В данном примере используется конструктор по умолчанию, задающий EndToEndSecurityMode как Transport, а RelayClientAuthenticationType — как RelayAccessToken. Соответственно, следующий фрагмент идентичен конструктору по умолчанию, но при этом он задает эти параметры явно.

    serviceEndPoint.Binding = new NetTcpRelayBinding(EndToEndSecurityMode.Transport, RelayClientAuthenticationType.RelayAccessToken);
    
  8. Добавьте учетные данные безопасности в конечную точку службы.

    serviceEndpoint.Behaviors.Add(sharedSecretServiceBusCredential);
    

    Они необходимы всем службам для проверки подлинности в Служебная шина. Так как мы задали RelayClientAuthenticationType как RelayAccessToken (по умолчанию или явно), клиенты также должны использовать тот же тип учетных данных проверки подлинности.

  9. Добавьте конечную точку на узел.

    host.Description.Endpoints.Add(serviceEndPoint);
    

    Вы создали минимальную конфигурацию для приложения службы Служебная шина. После этого можно добавить дополнительные конфигурации уровня службы или конечной точки, как для любого другого приложения WCF. Дополнительные сведения настройке приложения WCF см. в разделе Configuring Services в документации WCF. Завершив настройку приложения, вы можете разместить и запустить приложение. Дополнительные сведения см. в разделе Создание службы для служебной шины.

Пример

Следующий пример показывает, как определить конфигурацию программным способом. Основное различие в том, что все сведения задаются программно. В учебнике часть сведений, не относящаяся к Служебная шина, хранится в файле 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;
        }
    }
}

Показ:
© 2015 Microsoft