Compartilhar via


SRMP

O SRMP exemplo demonstra como executar comunicação em fila transacionada usando o MSMQ (Enfileiramento de Mensagens) via HTTP.

Na comunicação na 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. Portanto, o serviço e o cliente 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 enfileirada do Windows Communication Foundation (WCF) e como enviar mensagens via 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. Verifique se você executou o Procedimento de instalação única para os exemplos do Windows Communication Foundation.

  2. Para compilar a edição .NET do C# ou do Visual Basic da solução, siga as instruções contidas em Como Compilar as Amostras do Windows Communication Foundation.

  3. Para executar a amostra em uma configuração de computador único ou entre computadores, siga as instruções contidas em Como executar as amostras do Windows Communication Foundation.

  4. Antes de executar o exemplo em Adicionar/Remover Componentes do Windows, verifique se o MSMQ está instalado com suporte para HTTP. A instalação do suporte para 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 será usado para comunicação, você pode permitir que o MSMQ seja executado no modo protegido. Isso garante que nenhuma mensagem para qualquer fila hospedada no computador possa chegar usando qualquer transporte não HTTP.

  6. Depois de selecionar o MSMQ para ser executado no modo protegido, o computador requer uma nova inicialização no Windows Server 2003.

  7. Executar o serviço.

  8. Execute o cliente. Verifique se você alterou o endereço do ponto de extremidade para apontar para o nome do computador 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 nos computadores cliente, além do MSMQ.

Demonstra

O exemplo demonstra o envio de mensagens enfileiradas do WCF usando o MSMQ via HTTP. Isso também é chamado de mensagens SRMP. Quando uma mensagem enfileirada é enviada, o MSMQ no computador de envio transfere as mensagens para o gerenciador de filas de recebimento via TCP ou transporte HTTP. Ao escolher SRMP, o usuário indica a opção de HTTP como um transporte para transferência de fila. O SRMP Secure habilita o uso de HTTPS.

Exemplo

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

A configuração do 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.

Há limitações para SRMP em relação à segurança do transporte. A segurança de transporte padrão do MSMQ requer o Active Directory que exige 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 de HTTP. Assim, a segurança de transporte padrão não funciona. A segurança do transporte deve ser definida como Certificado caso seja desejada a segurança do transporte. A segurança da mensagem também pode ser usada para proteger a mensagem. Neste exemplo, a segurança do transporte e da mensagem é 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>

Executar o exemplo produz a saída a seguir.

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