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

Шаг 7. Реализация вызова Service Bus в клиенте WCF

Обновлено: Июнь 2014 г.

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

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

  1. Задает режим подключения.

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

  3. Определяет учетные данные безопасности.

  4. Применяет учетные данные в подключении.

  5. Открывает подключение.

  6. Выполняет прикладные задачи.

  7. Закрывает подключение.

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

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

Реализация клиента

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

    Добавьте следующий код в методе Main() клиента.

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
    
  2. Определите переменные для хранения значений пространство имен службы, имени издателя и секрета издателя, считываемых с консоли.

    
    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. Создайте URI, задающий расположение узла в проекте Служебная шина.

    Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");
    
    
  4. Создайте объект учетных данных для конечной точки пространство имен службы.

    TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
    sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);
    
  5. Создайте фабрику каналов, загружающую конфигурацию из файла App.config.

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

    Фабрика каналов — это объект WCF, создающий канал связи между службой и клиентом.

  6. Примените учетные данные Служебная шина.

    channelFactory.Endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
    
  7. Создайте и откройте канал к службе.

    IEchoChannel channel = channelFactory.CreateChannel();
    channel.Open();
    
  8. Создайте простой интерфейс пользователя и эхо-функциональность.

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

    Обратите внимание, что в коде экземпляр объекта канала используется как прокси службы.

  9. Закройте канал и фабрику.

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

Запуск клиента

  1. Нажмите клавишу F6 для создания решения.

    При этом будут построен как проект клиента, так и проект службы, созданный ранее в этом учебнике. Для каждого проекта будет создан исполняемый файл.

  2. Перед запуском клиента запустите службу.

    У вас должен быть исполняемый файл службы Echo (EchoService.exe), расположенный в папке проекта службы \bin\Debug\EchoService.exe (при отладке) или \bin\Release\EchoService.exe (при выпуске). Дважды щелкните файл, чтобы запустить службу.

  3. Откроется окно консоли с запросом пространство имен службы. В окне консоли укажите пространство имен службы и нажмите клавишу ВВОД.

  4. Далее появится запрос имени издателя. Введите имя издателя и нажмите клавишу ВВОД.

  5. После ввода имени издателя введите секрет издателя и нажмите клавишу ВВОД.

    Пример вывода в окне консоли приведен далее. Обратите внимание, что значения приведены здесь только для справки.

    Your Service Namespace: myNamespace
    Your Issuer Name: owner
    Your Issuer Secret: 1deCBMEhx/RV3bgwIhCohqdtzj/ZG2WnyC1cLhHTpk4=

    Служба запускается и выводит адрес, по которому осуществляется прослушивание, в окне консоли.

    Service address: sb://mynamespace.servicebus.windows.net/EchoService/
    Press [Enter] to exit
  6. Запустите клиентское приложение.

    У вас должен быть исполняемый файл клиента Echo (EchoClient.exe), расположенный в папке проекта службы \bin\Debug\EchoClient.exe (при отладке) или \bin\Release\EchoClient.exe (при выпуске). Дважды щелкните файл, чтобы запустить клиент.

  7. Откроется окно консоли с запросом тех же данных, что ранее вводились для службы. Повторите действия выше и введите те же данные для клиента: пространство имен службы, имя и секрет издателя.

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

    Enter text to echo (or [Enter] to exit): 

    Введите произвольный текст, который будет отправлен службе, и нажмите клавишу ВВОД.

    Этот текст отправляется службе в операции службы Echo и отображается в окне службы, как показано далее.

    Echoing: My sample text

    Клиент получает возвращаемое значение операции Echo, то есть исходный текст, и выводит его в своем окне. Пример вывода в окне консоли клиента приведен далее.

    Server echoed: My sample text
  9. Вы можете продолжать обмен текстовыми сообщениями между клиентом и службой. Закончив, нажмите клавишу ВВОД в коне клиента и окне службы, чтобы завершить работу приложений.

Пример

Далее приведен пример создания клиента, вызова операций службы и закрытия клиента после окончания вызова операции.

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

        }
    }
}

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

Безопасность

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

ДОБАВИТЬ
Корпорация Майкрософт проводит интернет-опрос, чтобы выяснить ваше мнение о веб-сайте MSDN. Если вы желаете принять участие в этом интернет-опросе, он будет отображен при закрытии веб-сайта MSDN.

Вы хотите принять участие?
Показ:
© 2014 Microsoft