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
Certifique-se de ter executado o procedimento de instalação única para os exemplos do Windows Communication Foundation.
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.
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.
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.
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.
Depois de selecionar o MSMQ para ser executado no modo protegido, a máquina requer uma reinicialização no Windows Server 2003.
Execute o serviço.
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