|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Messaggi: n/a
|
WCF e MSMQ
Salve a tutti,
è da qualche giorno sto giocando con WCF e ci sto prendendo anche gusto. Ora volevo fare qualcosa di più "istruttivo". In pratica tempo fa ho scritto un servizio di Windows che scodava dei messaggi da un coda MSMQ e li elaborava. Ho pensato ... scrivo un piccolo client che manda messaggi su questa coda, poi scrivo un servizio WCF che alla richiesta del client (quindi invocando un metodo esposto dal servizio stesso) scoda i messaggi, li impacchetta in un formato definito nel DataContract e tramite la tecnica dei callback al tempo "opportuno" chiama il client e restituisce i dati precedentemente impacchettati. Ho trovato dei tutorial sulla rete che mi hanno guidato alla scrittura di un client WCF "nativo" per le MSMQ (quindi non faccio uso della classica tecnica di programmazione per le code) e qui di seguito riporto il listato: DataContract: Codice:
[DataContract] public class ApplicationMessage { private string _message = string.Empty; private DateTime _validUntil; [DataMember] public string Message { set { _message = value; } get { return _message; } } [DataMember] public DateTime ValidUntil { get { return _validUntil; } set { _validUntil = value; } } } Codice:
[ServiceContractAttribute(Namespace = "http://SendMessage")] interface ISendMessage { [OperationContract(IsOneWay = true)] void SubmitMessage(MsmqMessage<ApplicationMessage> message); } Codice:
class SendMessageClient : ClientBase<ISendMessage>, ISendMessage { public void SubmitMessage(MsmqMessage<ApplicationMessage> message) { base.Channel.SubmitMessage(message); } public void SubmitMessage(ApplicationMessage message) { MsmqMessage<ApplicationMessage> msmqMessage = new MsmqMessage<ApplicationMessage>(message); SubmitMessage(msmqMessage); } } Codice:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <client> <endpoint name="SendMessageResponseEndpoint" address="msmq.formatname:DIRECT=OS:.\private$\gtqueueprivata" binding="msmqIntegrationBinding" bindingConfiguration="SendMessageBinding" contract="TestWCFQueue.ISendMessage"> </endpoint> </client> <bindings> <msmqIntegrationBinding> <binding name="SendMessageBinding"> <security mode="None" /> </binding> </msmqIntegrationBinding> </bindings> </system.serviceModel> </configuration> Codice:
MessageQueue queue = new MessageQueue("......."); ... ... messages = queue.GetAllaMessages(); ... ... Grazie 1000 anticipatamente a tutti! |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:06.