BlogServiceHost.Create()

WCF & Azure - Il blog di Fabio Cozzolino

Recent Posts

Tags

My

Twitter

Community

Archives

Email Notifications

Social Bar Widget

[WCF] Copiare un messaggio

Lavorando con WCF prima o poi capita di utilizzare la classe Message. La classe è la rappresentazione in memoria del messaggio inviato dal client WCF oppure ricevuto dal servizio WCF. Possiamo interagire con la classe Message per recuperare i suoi headers oppure per ispezionarne il body. Però, mentre gli headers possono essere utilizzati più di una volta, non possiamo accedere al body se questo è stato già letto.

La classe gestisce, internamente, un set di stati:

  • Created
  • Read
  • Written
  • Copied
  • Closed

Se proviamo a leggere il contenuto (body) di un messaggio per due volte, ad esempio:

person1 = message.GetBody<Person>();
...
person2 = message.GetBody<Person>();

la seconda riceveremo un bel:

This message cannot support the operation because it has been read.

dopo la prima lettura, infatti, lo stato del messaggio diventa Read. Sfruttando, invece, la possibilità di creare una copia buffer del messaggio possiamo copiare il messaggio originale ed ottenere quindi una o più copie "riutilizzabili" del messaggio:

Message originalMessage = 
Message.CreateMessage(MessageVersion.Default,
"http://tempuri.org/MyService", new Person { Name = "Fabio" }); Console.WriteLine("OriginalMessage: " + originalMessage.State); MessageBuffer messageBuffer = originalMessage.CreateBufferedCopy(int.MaxValue); Console.WriteLine("OriginalMessage: " + originalMessage.State); Message messageCopy1 = messageBuffer.CreateMessage(); Console.WriteLine("MessageCopy1: " + messageCopy1.State); Message messageCopy2 = messageBuffer.CreateMessage(); Console.WriteLine("MessageCopy2: " + messageCopy2.State); messageBuffer.Close();

l'output in console genera:

image

Il messaggio originale da creato, passa a copiato dopo la chiamata alla CreateBufferedCopy. Le copie, infine, hanno entrambe Created come stato e sono quindi riutilizzabili.

bye

Posted: Jan 17 2009, 10:32 AM by Fabio.Cozzolino | with no comments
Filed under: