Экспорт (0) Печать
Развернуть все
Эта тема еще не получила оценку - Оценить эту тему

Шаг 4. Размещение и запуск простой веб-службы, регистрирующейся в Service Bus

Это четвертая задача из числа семи задач, необходимых для создания стандартного приложения службы Service Bus и клиента, который может вызывать службу. Обзор всех шести задач представлен в разделе Учебник по ретрансляции сообщений Service Bus. В этом разделе описывается выполнение стандартной службы Service Bus.

Полный код этой задачи приведен в примере, следующем за описанием.

Оценка времени выполнения: 10 минут

Создание учетных данных Service Bus

  1. Добавьте в проект ссылку на файл Microsoft.ServiceBus.dll:

    1. В обозревателе решений щелкните правой кнопкой мыши элемент Ссылки под папкой проекта и выберите пункт Добавить ссылку.

    2. Перейдите на вкладку .NET в диалоговом окне Добавление ссылки и прокрутите страницу до появления файла Microsoft.ServiceBus. Кроме того, можно нажать кнопку "Обзор" и перейти к сборке на жестком диске. Обычно она располагается в папке Program Files\<sdkInstallDirectory>\v1.0\Assemblies\NET4.0. Выберите сборку Microsoft.ServiceBus и нажмите кнопку ОК.

    noteПримечание
    При использовании компилятора командной строки (например, Csc.exe) необходимо также указать путь к сборкам.

  2. В файле Program.cs добавьте оператор using для пространства имен Microsoft.ServiceBus.

    using Microsoft.ServiceBus;
    

    Microsoft.ServiceBus — это пространство имен, которое позволяет программным образом обращаться ко многим ключевым функциям Service Bus. Это пространство, скорее всего, будет использоваться во всех приложениях Service Bus.

  3. Создайте в методе Main() три переменные, в которых будет храниться значение пространство имен службы, имя издателя и секрет издателя (имя/пароль), считываемые из окна консоли.

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

    Имя и секрет издателя будут использованы позднее для доступа к проекту Service Bus. пространство имен службы передается в CreateServiceUri в качестве параметра для создания URI службы.

  4. С помощью объекта TransportClientEndpointBehavior объявите применение совместно используемого секрета в качестве типа учетных данных. Добавьте следующий код непосредственно после кода, добавленного на предыдущем шаге.

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

Создание базового адреса службы

  1. После кода, добавленного на предыдущем шаге, создайте экземпляр Uri для базового адреса службы. Этот URI указывает схему Service Bus, пространство имен службы и путь интерфейса службы.

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

    “sb” — это аббревиатура для схемы Service Bus, которая указывает на использование протокола TCP. Это также определено в файле конфигурации при указании NetTcpRelayBinding в качестве привязки.

    В этом руководстве используется URI sb://putServiceNamespaceHere.windows.net/EchoService.

Создание и настройка узла службы

  1. Установите режим подключения AutoDetect.

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
    

    Режим подключения описывает протокол, используемый службой для коммуникации с Service Bus: HTTP или TCP. При установке параметра по умолчанию AutoDetect служба выполнит попытку подключения к Service Bus по протоколу TCP, если он доступен. В противном случае будет использоваться протокол HTTP. Обратите внимание на то, что это значение отличается от протокола, указанного службой для коммуникации с клиентом. Этот протокол определяется используемой привязкой. Например, служба может использовать привязку BasicHttpRelayBinding, которая определяет коммуникацию своей конечной точки с клиентами через HTTP (точка предоставляется через Service Bus). В этой же службе можно указать ConnectivityMode.AutoDetect, чтобы служба взаимодействовала с Service Bus по протоколу TCP.

  2. Создайте узел службы, используя созданный ранее URI.

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

    Узел службы — это объект WCF, создающий экземпляр службы. В этом примере ему передается тип создаваемой службы (EchoService) и адрес, по которому предоставляется служба.

  3. В начале файла Program.cs добавьте ссылки на System.ServiceModel.Description и Microsoft.ServiceBus.Description.

    using System.ServiceModel.Description;
    using Microsoft.ServiceBus.Description;
    
  4. В методе Main() необходимо настроить общедоступный адрес для конечной точки.

    IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);
    

    Это действие позволяет сообщить Service Bus о том, что приложение общедоступно через канал ATOM Service Bus для данного проекта. Если для параметра DiscoveryType установлено значение private, то клиент все равно будет иметь доступ к службе, но при поиске в пространстве имен Service Bus эта служба не будет отображаться. Клиенту потребуется заранее узнать путь конечной точки. Дополнительные сведения см. в разделе Обнаружение и предоставление службы Service Bus.

  5. Примените учетные записи службы к конечным точкам службы, определенным в файле App.config:

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

    Как указано выше, в файле конфигурации можно определить несколько служб и конечных точек. В этом случае код выполнял бы по всему файлу поиск всех конечных точек, к которым требуется применить учетные данные. В этом руководстве в файле конфигурации определена только одна конечная точка.

Открытие узла службы

  1. Откройте службу.

    host.Open();
    
  2. Проинформируйте пользователя о том, что служба запущена, и опишите процесс ее завершения.

    Console.WriteLine("Service address: " + address);
    Console.WriteLine("Press [Enter] to exit");
    Console.ReadLine();
    
  3. После завершения закройте узел службы.

    host.Close();
    
  4. Нажмите клавишу F6 для построения проекта.

Пример

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

После создания интерфейса перейдите к разделу Шаг 5. Создание клиента WCF по контракту службы, чтобы реализовать интерфейс.

Была ли вам полезна эта информация?
(1500 символов осталось)
Спасибо за ваш отзыв

Добавления сообщества

ДОБАВИТЬ
Показ:
© 2014 Microsoft. Все права защищены.