2009-11-10 3 views
9

Je vais avoir un peu de mal avec ce qui devrait être un problème simple. J'ai une méthode de service qui prend un type de message C# et je veux juste extraire le corps de ce message de savon et l'utiliser pour construire un nouveau message. Je ne peux pas utiliser la méthode GetBody<>() sur la classe Message car je ne sais pas dans quel type sérialiser le corps.Obtenez juste le corps d'un message WCf

Est-ce que quelqu'un sait comment extraire le corps du message? Ou construire un nouveau message qui a le même corps, c'est-à-dire sans l'en-tête des messages originaux, etc?

Répondre

5

ne pas préempter la réponse de Yann, mais pour ce que ça vaut la peine, voici un exemple complet de la copie d'un corps de message dans un nouveau message avec un en-tête d'action différent. Vous pouvez également ajouter ou personnaliser d'autres en-têtes dans le cadre de l'exemple. J'ai passé trop de temps à écrire ça pour le jeter. =)

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

Il est plus complet que ma propre réponse :-) –

+0

Croyez-le ou non, j'ai commencé avant ... puis vous avez publié le téléphone a sonné ...;) –

+0

merci que les grands! – Jon

20

Vous pouvez accéder au corps du message en utilisant la méthode GetReaderAtBodyContents sur le message:

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