SRMP

O exemplo SRMP demonstra como executar a comunicação em fila transacionada usando o serviço de enfileiramento de mensagens (MSMQ) sobre HTTP.

Na comunicação em fila, o cliente se comunica com o serviço usando uma fila. Mais precisamente, o cliente envia mensagens para uma fila. O serviço recebe mensagens da fila. O serviço e o cliente, portanto, não precisam estar em execução ao mesmo tempo para se comunicar usando uma fila.

O MSMQ permite o uso de HTTP (incluindo o uso de HTTPS) para enviar mensagens para uma fila. Neste exemplo, demonstramos como usar a comunicação em fila do Windows Communication Foundation (WCF) e como enviar mensagens por HTTP. O MSMQ usa um protocolo chamado SRMP, que é um protocolo baseado em SOAP para comunicação via HTTP.

Para configurar, compilar e executar o exemplo

  1. Certifique-se de ter executado o procedimento de instalação única para os exemplos do Windows Communication Foundation.

  2. Para criar a edição C# ou Visual Basic .NET da solução, siga as instruções em Criando os exemplos do Windows Communication Foundation.

  3. Para executar o exemplo em uma configuração de máquina única ou cruzada, siga as instruções em Executando os exemplos do Windows Communication Foundation.

  4. Antes de executar o exemplo em Adicionar ou remover componentes do Windows, verifique se o MSMQ está instalado com suporte a HTTP. A instalação do suporte HTTP instala automaticamente o IIS (Serviços de Informações da Internet) e adiciona o suporte ao protocolo no IIS para MSMQ.

  5. Se quiser ter certeza de que o HTTP é usado para comunicação, você pode habilitar o MSMQ para ser executado no modo protegido. Isso garante que nenhuma mensagem para qualquer fila hospedada na máquina possa chegar usando qualquer transporte não-HTTP.

  6. Depois de selecionar o MSMQ para ser executado no modo protegido, a máquina requer uma reinicialização no Windows Server 2003.

  7. Execute o serviço.

  8. Execute o cliente. Certifique-se de alterar o endereço do ponto de extremidade para apontar para o nome da máquina ou endereço IP em vez de localhost. O cliente envia uma mensagem e sai.

Requisitos

Para executar este exemplo, o IIS deve ser instalado no serviço e nas máquinas cliente, além do MSMQ.

Demonstra

O exemplo demonstra o envio de mensagens em fila do WCF usando MSMQ sobre HTTP. Isso também é chamado de mensagens SRMP. Quando uma mensagem enfileirada é enviada, o MSMQ na máquina de envio transfere as mensagens para o gerenciador de filas de recebimento por transporte TCP ou HTTP. Ao escolher SRMP, o usuário indica a escolha de HTTP como um transporte para transferência de fila. O SRMP Secure permite o uso de HTTPS.

Exemplo

O código de exemplo é baseado no exemplo transacionado. Como você envia uma mensagem para a fila e recebe uma mensagem da fila usando SRMP é o mesmo que enviar e receber mensagens usando um protocolo nativo.

A configuração para o cliente é alterada para indicar a escolha do protocolo de transferência de fila. O protocolo de transferência de fila pode ser Nativo, SRMP ou SrmpSecure. Por padrão, o protocolo de transferência é Nativo. O cliente e o serviço especificam na configuração para usar o SRMP neste exemplo.

Existem limitações ao SRMP em relação à segurança do transporte. A segurança de transporte MSMQ padrão requer o Ative Directory que requer que o gerenciador de filas de envio e o gerenciador de filas de recebimento residam no mesmo domínio do Windows. Isso não é possível ao enviar mensagens pelo limite HTTP. Como tal, a segurança de transporte padrão não funciona. A segurança de transporte deve ser definida como Certificado se a segurança de transporte for desejada. A segurança da mensagem também pode ser usada para proteger a mensagem. Neste exemplo, a segurança de transporte e de mensagem está desativada para ilustrar as mensagens 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>

A execução da amostra produz a seguinte saída.

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