Compartir a través de


SRMP

El ejemplo SRMP muestra cómo llevar a cabo la comunicación en cola por transacciones utilizando Message Queuing (MSMQ) a través de HTTP.

En la comunicación con colas, el cliente se comunica con el servicio mediante una cola. Más precisamente, el cliente envía mensajes a una cola. El servicio recibe mensajes de la cola. El servicio y el cliente no necesitan ejecutarse simultáneamente para comunicarse mediante una cola.

MSMQ permite el uso de HTTP (incluido el uso de HTTPS) para enviar mensajes a una cola. En este ejemplo, se muestra cómo usar la comunicación en cola de Windows Communication Foundation (WCF) y cómo enviar mensajes a través de HTTP. MSMQ usa un protocolo denominado SRMP, que es un protocolo basado en SOAP para la comunicación a través de HTTP.

Para configurar, compilar y ejecutar el ejemplo

  1. Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.

  2. Para compilar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Building the Windows Communication Foundation Samples.

  3. Para ejecutar el ejemplo en una configuración de una máquina única o entre máquinas, siga las instrucciones de Ejecución de los ejemplos de Windows Communication Foundation.

  4. Antes de ejecutar el ejemplo en Agregar o quitar componentes de Windows, asegúrese de que MSMQ está instalado con compatibilidad con HTTP. La instalación de la compatibilidad con HTTP instala automáticamente Internet Information Services (IIS) y agrega la compatibilidad con el protocolo en IIS para MSMQ.

  5. Si desea estar seguro de que HTTP se usa para la comunicación, puede habilitar MSMQ para que se ejecute en modo protegido. Esto asegurar que ningún mensaje dirigido a cualquier cola hospedada en el equipo puede llegar utilizando cualquier transporte no HTTP.

  6. Después de seleccionar MSMQ para ejecutarse en modo protegido, la máquina requiere un nuevo arranque en Windows Server 2003.

  7. Ejecute el servicio.

  8. Ejecute el cliente. Asegúrese de cambiar la dirección del punto de conexión para que apunte al nombre de la máquina o la dirección IP en lugar de localhost. El cliente envía un mensaje y sale.

Requisitos

Para ejecutar este ejemplo, IIS debe instalarse en el servicio y en las máquinas cliente además de MSMQ.

Demostraciones

En el ejemplo se muestra cómo enviar mensajes en cola de WCF mediante MSMQ a través de HTTP. Esto también se denomina mensajería SRMP. Cuando se envía un mensaje en cola, MSMQ en el equipo de envío transfiere los mensajes al administrador de colas receptor a través del transporte TCP o HTTP. Al elegir SRMP, el usuario indica la elección de HTTP como transporte para la transferencia de colas. SRMP Secure permite el uso de HTTPS.

Ejemplo

El código de ejemplo se basa en el ejemplo de transacción. Cómo enviar un mensaje a la cola y recibir un mensaje de la cola mediante SRMP es el mismo que enviar y recibir mensajes mediante un protocolo nativo.

La configuración del cliente se cambia para indicar la elección del protocolo de transferencia de cola. El protocolo de transferencia de colas puede ser uno de Native, SRMP o SrmpSecure. De forma predeterminada, el protocolo de transferencia es Nativo. El cliente y el servicio especifican en la configuración para usar SRMP en este ejemplo.

Existen limitaciones para SRMP en relación con la seguridad del transporte. La seguridad de transporte predeterminada de MSMQ requiere Active Directory que requiera que el administrador de colas de envío y el administrador de colas receptor residan en el mismo dominio de Windows. Esto no es posible al enviar mensajes a través del límite HTTP. Por lo tanto, la seguridad de transporte predeterminada no funciona. La seguridad de transporte se debe establecer para Certificar si se desea la seguridad de transporte. La seguridad del mensaje también se puede usar para proteger el mensaje. En este ejemplo, tanto la seguridad del transporte como la del mensaje está desactivada para ilustrar la mensajería 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>

La ejecución del ejemplo produce la salida siguiente.

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