SRMP

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

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

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

Настройка, сборка и выполнение образца

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

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

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

  4. Перед запуском примера в разделе "Добавление и удаление компонентов Windows" убедитесь, что MSMQ установлен с поддержкой HTTP. При установке поддержки HTTP автоматически устанавливаются службы IIS и в них добавляется поддержка протокола для MSMQ.

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

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

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

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

Требования

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

Что демонстрирует

В примере демонстрируется отправка сообщений в очереди WCF с помощью MSMQ по протоколу HTTP. Это также называется обменом сообщениями SRMP. Когда отправляется сообщение в очереди, MSMQ на отправляющем компьютере передает сообщения диспетчеру принимающей очереди по транспорту TCP или HTTP. Закрывая SRMP, пользователь указывает, что HTTP должен использоваться в качестве транспорта для передачи очередей. Безопасный SRMP (SRMP Secure) обеспечивает использование HTTPS.

Пример

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

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

Существуют некоторые ограничения SRMP в отношении безопасности транспорта. Для безопасности транспорта MSMQ по умолчанию необходима Active Directory, требующая, чтобы диспетчер передающей и принимающей очереди находились в одном и том же домене Windows. Это невозможно при отправке сообщений по HTTP. По существу, безопасность транспорта по умолчанию не работает. Для безопасности транспорта необходимо задать "Certificate" (Сертификат), если она необходима. Для защиты сообщений можно также использовать безопасность сообщений. В этом образце безопасность транспорта и сообщений отключена, чтобы продемонстрировать обмен сообщениями 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