2009-11-10 13 views
9

Estoy teniendo un problema con lo que debería ser un problema simple.Obtenga el cuerpo de un mensaje WCF

Tengo un método de servicio que tiene un tipo de mensaje C# y quiero simplemente extraer el cuerpo de ese mensaje y usarlo para construir un mensaje completamente nuevo. No puedo usar el método GetBody<>() en la clase Message ya que no sabría en qué tipo serializar el cuerpo.

¿Alguien sabe cómo extraer el cuerpo del mensaje? ¿O construir un nuevo mensaje que tenga el mismo cuerpo, es decir, sin el encabezado de los mensajes originales, etc.?

Respuesta

5

no adelantarse a la respuesta de Yann, sino por lo que vale la pena, aquí está un ejemplo completo de la copia de un cuerpo del mensaje en un nuevo mensaje con un encabezado de acción diferente. También puede agregar o personalizar otros encabezados como parte del ejemplo. Pasé demasiado tiempo escribiendo esto para simplemente tirarlo. =)

class Program 
{ 
    [DataContract] 
    public class Person 
    { 
     [DataMember] 
     public string FirstName { get; set; } 

     [DataMember] 
     public string LastName { get; set; } 

     public override string ToString() 
     { 
      return string.Format("{0}, {1}", LastName, FirstName); 
     } 
    } 

    static void Main(string[] args) 
    { 
     var person = new Person { FirstName = "Joe", LastName = "Schmo" }; 
     var message = System.ServiceModel.Channels.Message.CreateMessage(MessageVersion.Default, "action", person); 

     var reader = message.GetReaderAtBodyContents(); 
     var newMessage = System.ServiceModel.Channels.Message.CreateMessage(MessageVersion.Default, "newAction", reader); 

     Console.WriteLine(message); 
     Console.WriteLine(); 
     Console.WriteLine(newMessage); 
     Console.WriteLine(); 
     Console.WriteLine(newMessage.GetBody<Person>()); 
     Console.ReadLine(); 
    } 
} 
+0

Es más profundo que mi propia respuesta :-) –

+0

creas o no, empecé en ella antes de que envió ... En ese momento sonó el teléfono ...;) gracias –

+0

que los grandes! – Jon

20

Se puede acceder al cuerpo del mensaje utilizando el método GetReaderAtBodyContents en el mensaje:

using (XmlDictionaryReader reader = message.GetReaderAtBodyContents()) 
{ 
    string content = reader.ReadOuterXml(); 
    //Other stuff here...     
} 
Cuestiones relacionadas