SRMP
Nell’esempio SRMP, viene illustrato come eseguire comunicazioni transazionali in coda usando Accodamento messaggi (MSMQ) su HTTP.
Nella comunicazione in coda, il client comunica al servizio usando una coda. Più precisamente, il client invia messaggi a una coda. Il servizio riceve messaggi dalla coda. Di conseguenza, per comunicare mediante una coda il servizio e il client non devono essere in esecuzione contemporaneamente.
MSMQ consente di usare HTTP (e HTTPS) per inviare messaggi a una coda. In questo esempio, viene illustrato come usare la comunicazione in coda di Windows Communication Foundation (WCF) e come inviare messaggi tramite HTTP. MSMQ usa un protocollo chiamato SRMP, protocollo basato su SOAP per la comunicazione su HTTP.
Per impostare, compilare ed eseguire l'esempio
Assicurarsi di aver eseguito la Procedura di installazione singola per gli esempi di Windows Communication Foundation.
Per compilare l'edizione in C# o Visual Basic .NET della soluzione, seguire le istruzioni in Building the Windows Communication Foundation Samples.
Per eseguire l'esempio in un solo computer o tra computer diversi, seguire le istruzioni in Esecuzione degli esempi di Windows Communication Foundation.
Prima di eseguire l'esempio in Installazione componenti di Windows, assicurarsi che MSMQ sia installato con supporto HTTP. L'installazione del supporto HTTP installa automaticamente Internet Information Services (IIS) e aggiunge il supporto dei protocolli per MSMQ in IIS.
Per essere sicuri che venga usato HTTP per la comunicazione, è possibile abilitare MSMQ per l'esecuzione in modalità di protezione avanzata. In questo modo si garantisce che i messaggi inviati alla coda sul computer ospitato usando un trasporto diverso da HTTP non arrivino a destinazione.
Dopo aver selezionato la modalità di protezione avanzata di MSMQ, il computer richiede di riavviare in Windows Server 2003.
Eseguire il servizio.
Eseguire il client. Assicurarsi di modificare l'indirizzo endpoint in modo che punti al nome del computer o all'indirizzo IP, anziché a localhost. Il client invia un messaggio e viene chiuso.
Requisiti
Per eseguire questo esempio è necessario che, oltre a MSMQ, IIS sia installato sul computer del servizio e su quello del client,
Dimostra
Nell'esempio viene illustrato come inviare messaggi in coda di WCF usando MSMQ su HTTP. Questa procedura viene anche chiamata messaggistica SRMP. Quando viene inviato un messaggio in coda, MSMQ sul computer mittente trasferisce i messaggi al gestore code di destinazione usando il trasporto TCP o HTTP. Se sceglie SRMP, l'utente sceglie HTTP come tipo di trasporto per il trasferimento della coda. Il protocollo SRMP protetto consente l'uso di HTTPS.
Esempio
L'esempio di codice si basa sull'esempio transazionale. L'invio di un messaggio alla coda e la ricezione di un messaggio dalla coda mediante SRMP sono uguali all'invio e alla ricezione di messaggi mediante un protocollo nativo.
La configurazione per il client viene modificata per indicare la scelta del protocollo di trasferimento dalla coda. Il protocollo di trasferimento dalla coda può essere nativo, SRMP o SrmpSecure. Per impostazione predefinita, il protocollo di trasferimento è nativo. Nella configurazione di questo esempio il client e il servizio specificano di usare SRMP.
L'uso del protocollo SRMP presenta alcuni limiti relativi alla sicurezza del trasporto. La sicurezza del trasporto MSMQ predefinita richiede Active Directory che richiede a sua volta che il gestore delle code mittente e il gestore delle code di destinazione risiedano nello stesso dominio Windows. Questo non è possibile quando si inviano messaggi mediante HTTP. Per questa ragione, la sicurezza del trasporto predefinita non funziona. Se si desidera che il trasporto sia protetto, è necessario impostare la sicurezza del trasporto su Certificato. È possibile inoltre usare la sicurezza dei messaggi per proteggere il messaggio. In questo esempio, il trasporto e la sicurezza dei messaggi sono disattivati per illustrare la messaggistica 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>
L'esecuzione dell'esempio produce l'output seguente.
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