Статьи

Привязки WCF: как реализовать надежный обмен сообщениями

обзор

Этот пост о понимании некоторых деталей нижнего уровня о конечных точках. Как мы уже говорили ранее, конечная точка имеет свои ABC.

  • А для адреса
  • B для связывания
  • C для контракта

В конечном итоге Windows Communication Foundation — это платформа для создания служб, обрабатывающих сообщения XML. Весь смысл WCF для приложений, чтобы общаться через сети.

Windows Communication Foundation (WCF) использует привязки, чтобы определить, как он взаимодействует с другим программным обеспечением. Клиент должен будет включить те же привязки, что и в сервисе.

Условия для изучения в отношении Привязки:

  • Транспорт
  • кодирование
  • Детали протокола

Транспортный протокол

Windows Communication Foundation позволяет передавать сообщения с использованием разных транспортных протоколов.

  • Протокол передачи гипертекста (HTTP)
  • Протокол управления передачей (TCP)
  • Очередь сообщений (также известная как MSMQ)
  • Именованные трубы

Http

HTTP использует традиционный шаблон запроса / ответа. HTTP не имеет состояния, поэтому при наличии многостраничных транзакций приложение (сервер и клиент) должно поддерживать состояние. Основное значение HTTP — совместимость с клиентами, не являющимися WCF.

TCP

TCP основан на соединении и обеспечивает сквозное обнаружение и исправление ошибок. TCP является отличным выбором, поскольку он обеспечивает надежную доставку данных. Он обрабатывает потерянные пакеты и дубликаты пакетов. Транспорт TCP оптимизирован для сценариев, в которых оба конца используют WCF. Это самый быстрый из всех привязок. TCP обеспечивает дуплексную связь и может использоваться для реализации дуплексных контрактов, даже если клиент находится за трансляцией сетевых адресов (NAT).

Примечание . Дуплексный контракт позволяет клиентам и серверам связываться друг с другом. Вызовы могут быть инициированы независимо от другого. Он состоит из двух односторонних контрактов.

Именованные трубы

Named Pipes идеально подходит для двух или более приложений WCF на одном компьютере, и вы хотите предотвратить любой обмен данными с другим компьютером. Именованные каналы эффективны, потому что они связаны с ядром операционной системы Windows, используя раздел общей памяти, который процессы могут использовать для связи.

MSMQ

MSMQ позволяет приложениям взаимодействовать в отказоустойчивом режиме. Очередь — это временное хранилище, из которого сообщения могут быть надежно отправлены и получены. Это обеспечивает связь между сетями и между компьютерами под управлением Windows, которые не всегда могут быть подключены.

кодирование

Типы кодирования представляют, как данные структурированы по проводам. Существует 3 основных формата:

  • Текст
  • двоичный
  • MTOM

Текст — для взаимодействия

В тексте используется кодировка base64, которая позволяет делать сообщения на 30% больше. Если вы отправляете двоичные данные, это может привести к большим накладным расходам.

Бинарный — для скорости

Это самая быстрая кодировка. Если вы не отправляете очень большие сообщения, двоичный формат является идеальным (при условии, что текст не нужен для совместимости)

MTOM — для крупных объектов

MTOM — это механизм оптимизации передачи сообщений W3C, метод эффективной отправки двоичных данных в веб-службы и из них. MTOM не использует кодировку base64 для двоичных вложений, сохраняя общий размер небольшим. MTOM основан на открытых спецификациях и, следовательно, в значительной степени совместим.

Подробности протокола сообщения

WCF использует SOAP для своего сетевого протокола обмена сообщениями. SOAP, он же Simple Object Access Protocol, определяет способ обмена структурированной информацией при реализации веб-служб в компьютерных сетях. Это полагается на XML для его формата сообщения.

Одним из больших преимуществ является то, что SOAP может легко туннелировать поверх существующих брандмауэров и прокси-серверов без изменений Недостатком SOAP является то, что он имеет подробный формат XML и может быть медленным.

Одной из альтернатив SOAP является JSON / XML.

Что касается SOAP, существует ряд спецификаций WS- *. Эти спецификации WS- * можно разбить на различные категории:

Спецификации обмена сообщениями WS-адресация, WS-Enumeratio, WS-Eventing, WS-Transfer
Спецификации безопасности WS-Security: Защита сообщений SOAP, WS-Security: UsernameToken Profil, WS-Security: Профиль маркера сертификата X.509, WS-SecureConversation, WS-SecurityPolicy, WS-Trust, WS-Federation, WS-Profil Active Requestor Profil, WS Профиль пассивного запроса WS-Security: привязка Kerberos
Спецификации надежного обмена сообщениями WS-ReliableMessaging
Спецификации транзакций WS-координация, WS-AtomicTransaction, WS-BusinessActivity
Метаданные Технические характеристики WS-Policy, WS-PolicyAssertions, WS-PolicyAttachment, WS-Discover, WS-MetadataExchang, WS-MTOMPolicy
Спецификации управления WS-Managemen, WS-Management Catalog, WS-ResourceTransfe,
Профили спецификаций WS-I Базовый профиль

Цели

В этой практической лаборатории вы научитесь:

  • Создание виртуальной машины с помощью Visual Studio 2013 RC на портале управления Windows Azure
  • Загрузите и установите SQL Server 2012 Express

Предпосылки

Для выполнения этой практической работы требуется следующее:

Настроить

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

  1. Запустите Visual Studio и откройте предыдущий проект здесь: ( http://blogs.msdn.com/b/brunoterkaly/archive/2013/10/18/getting-started-with-wcf-windows-communication-foundation-running-and -debugging-fast.aspx )

Как изменить привязки с помощью редактора конфигурации службы WCF

В следующем разделе мы включим протокол надежного обмена сообщениями . Это полезно, когда качество сетевого подключения потенциально очень низкое. Протокол WS-ReliableMessaging (или WS-RM) предназначен для создания надежных каналов связи по ненадежным соединениям. Очень просто, это обеспечивает инфраструктуру, которая обеспечивает явное подтверждение сообщений в коммуникационном потоке

Задача 1. Запуск редактора конфигурации службы WCF

Эта задача касается использования редактора конфигурации WCF Servcie для создания новой конфигурации привязки.

  1. Вам нужно будет вернуться к решению, созданному в предыдущем сообщении в блоге. В обозревателе решений щелкните правой кнопкой мыши файл App.config и выберите « Изменить конфигурацию WCF» . Это вызовет Редактор конфигурации службы WCF .

    image001

    Редактирование обязательной информации

  2. В этом разделе мы создадим новую привязку. В разделе « Конфигурация » вы щелкните правой кнопкой мыши на Biindings .

    image002

    Редактирование привязок

  3. После щелчка правой кнопкой мыши на узле Binding выберите New Binding Configuration .

    image003

    Добавление новой привязки

  4. Появится список привязок . Выберите wsHttpBinding . Выбрав wsHttpBinding, мы изменим атрибуты этого типа привязки .

    image004

    Выбор wsHttpBinding

  5. Нам нужно будет указать имя для этой новой привязки.

    image005

    Предоставление имени новой привязке

  6. Мы установим Расписание сеансов собственности на включен . Мы оставим другие атрибуты в покое.

    image006

    Включение надежных сессий

Задача 2 — Присоединение новой привязки к конечной точке

В этой задаче мы прикрепим нашу вновь созданную привязку к конечной точке для wsHttpBinding .

  1. Теперь вы вернетесь к своим конечным точкам и прикрепите привязку, которую мы только что создали. Напомним, имя из BindingReliableMessaging . Обратите внимание, что мы выбрали конечную точку », чья ** привязкаwsHttpBinding .

    image007

    Присоединение новой привязки к нашей конечной точке

  2. Вернитесь в меню и сохраните изменения в файле App.config .

    image008

    Сохранение изменений

  3. Обратите внимание, что если мы откроем App.config, то увидим, что создана новая привязка ( BindingReliableMessaging ).

    image009

    Просмотр изменений

  4. Обратите внимание, что конечная точка также была настроена с помощью редактора конфигурации службы WCF. Мы закончили — мы изменили привязку для соответствия желаемому поведению ( Reliable Messaging ).

    image010

    Проверка того, что новая привязка присоединена к конечной точке

 

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add
      key="aspnet:UseTaskFriendlySynchronizationContext"
      value="true"/>
  </appSettings>
  <system.web>
    <compilation debug="true"/>
  </system.web>
  <!--When deploying the service library project, the content of the config file must be added to the host's 
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="BindingReliableMessaging">
          <reliableSession enabled="true"/>
        </binding>
      </wsHttpBinding>
    </bindings>
    <services>
      <service
        behaviorConfiguration="FlipCaseService.Service1Behavior"
        name="FlipCaseService.FlipCaseService">
        <endpoint
          address="flipcase/wsAddress"
          binding="wsHttpBinding"
          bindingConfiguration="BindingReliableMessaging"
          contract="FlipCaseService.IFlipCaseService"/>
        <endpoint
          address="flipcase/basic"
          binding="basicHttpBinding"
          contract="FlipCaseService.IFlipCaseService"/>
        <endpoint
          address="net.tcp://localhost/FlipCaseNetTcp"
          binding="netTcpBinding"
          contract="FlipCaseService.IFlipCaseService"/>
        <endpoint
          address="flipcase/mex"
          binding="mexHttpBinding"
          contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="FlipCaseService.Service1Behavior">
          <!--To avoid disclosing metadata information, 
          set the values below to false before deployment -->
          <serviceMetadata
            httpGetEnabled="True"
            httpsGetEnabled="True"/>
          <!--To receive exception details in faults for debugging purposes, 
          set the value below to true.  Set to false before deployment 
          to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="False"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration> 

Резюме

В этом посте вы узнали несколько вещей:

  • Как использовать редактор конфигурации службы WCF
  • Как добавить надежную передачу сообщений в конечную точку wsHttpBinding

В следующем посте мы узнаем, как использовать редактор конфигурации службы WCF для создания необходимых параметров конфигурации для клиентского приложения, которое использует наш FlipCaseService .