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
Verifique se você executou o Procedimento de instalação única para os exemplos do Windows Communication Foundation.
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.
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.
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.
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.
Depois de selecionar o MSMQ para ser executado no modo protegido, o computador requer uma nova inicialização no Windows Server 2003.
Executar o serviço.
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