SRMP

В примере SRMP показано, как выполнять транзакционную связь в очереди с помощью очереди сообщений (MSMQ) по протоколу HTTP.

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

MSMQ позволяет использовать HTTP (включая использование HTTPS) для отправки сообщений в очередь. В этом примере демонстрируется использование в очереди сообщений Windows Communication Foundation (WCF) и отправка сообщений по протоколу HTTP. MSMQ использует протокол с именем SRMP, который является протоколом на основе SOAP для обмена данными по протоколу HTTP.

Настройка, сборка и запуск примера

  1. Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.

  2. Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .

  3. Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в запуска примеров Windows Communication Foundation.

  4. Перед запуском примера в разделе "Добавление и удаление компонентов Windows" убедитесь, что MSMQ установлен с поддержкой HTTP. Установка поддержки HTTP автоматически устанавливает Интернет-информационные службы (IIS) и добавляет поддержку протокола в IIS для MSMQ.

  5. Если вы хотите быть уверены, что HTTP используется для обмена данными, можно включить MSMQ для запуска в защищенном режиме. Это гарантирует, что сообщения в очередь, размещенную на компьютере, не могут поступать с помощью любого транспорта, отличного от HTTP.

  6. После выбора MSMQ для запуска в защищенном режиме компьютер требует повторной загрузки в Windows Server 2003.

  7. Запустите службу.

  8. Запустите клиент. Убедитесь, что вы изменили адрес конечной точки, указав имя компьютера или IP-адрес вместо localhost. Клиент отправляет сообщение и завершает работу.

Требования

Чтобы запустить этот пример, служба IIS должна быть установлена как на службе, так и на клиентских компьютерах в дополнение к MSMQ.

Демонстрирует

В примере демонстрируется отправка сообщений в очереди WCF с помощью MSMQ по протоколу HTTP. Это также называется обмен сообщениями SRMP. При отправке сообщения в очереди MSMQ на компьютере отправки передает сообщения в диспетчер очередей по протоколу TCP или HTTP- транспорту. Выбрав SRMP, пользователь указывает выбор HTTP в качестве транспорта для передачи очередей. SRMP Secure позволяет использовать ПРОТОКОЛ HTTPS.

Пример

Пример кода основан на транзакционном примере. Отправка сообщения в очередь и получение сообщения из очереди с помощью SRMP совпадает с отправкой и получением сообщений с помощью собственного протокола.

Конфигурация клиента изменяется, чтобы указать выбор протокола передачи очередей. Протокол передачи очередей может быть одним из Native, SRMP или SrmpSecure. По умолчанию протокол передачи является родным. Клиент и служба в конфигурации указывают использование SRMP в этом примере.

Существуют ограничения ДЛЯ SRMP в отношении безопасности транспорта. Для безопасности транспорта MSMQ по умолчанию требуется Active Directory, требующий, чтобы диспетчер очередей отправки и диспетчер получающих очередей находился в одном домене Windows. Это невозможно при отправке сообщений через границу HTTP. Таким образом, безопасность транспорта по умолчанию не работает. Для обеспечения безопасности транспорта необходимо задать тип безопасности как "Сертификат", если требуется безопасность транспорта. Безопасность сообщений также может использоваться для защиты сообщения. В этом примере транспорт и безопасность сообщений отключены для демонстрации обмена сообщениями SRMP.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <system.serviceModel>

    <client>
      <!-- Define NetMsmqEndpoint -->
      <endpoint name="OrderProcessorEndpoint"
           address=
          "net.msmq://localhost/private/ServiceModelSamplesSrmp"
           bindingConfiguration="srmpBinding"
           binding="netMsmqBinding"
           contract="IOrderProcessor" />
    </client>
    <bindings>
      <netMsmqBinding>
        <binding name="srmpBinding"
                 queueTransferProtocol="Srmp">
          <security mode="None" />
        </binding>
      </netMsmqBinding>
    </bindings>
  </system.serviceModel>

</configuration>

Выполнение примера дает следующие выходные данные.

Processing Purchase Order: 556b70be-31ee-4a3b-8df4-ed5e538015a4
Customer: somecustomer.com
OrderDetails
    Order LineItem: 54 of Blue Widget @unit price: $29.99
    Order LineItem: 890 of Red Widget @unit price: $45.89
    Total cost of this order: $42461.56
    Order status: Pending