2009-11-10 19 views
9

Mam trochę problemów z tym, co powinno być prostym problemem.Uzyskaj tylko treść wiadomości WCf

Mam metodę usługi, która przyjmuje typ wiadomości C# i chcę po prostu wyodrębnić treść wiadomości mydła i użyć go do skonstruowania zupełnie nowej wiadomości. Nie mogę użyć metody GetBody<>() na klasie wiadomości, ponieważ nie wiedziałbym, jakiego typu serializować ciało.

Czy ktoś wie, jak wyodrębnić ciało z wiadomości? Lub skonstruować nową wiadomość, która ma to samo ciało, tj. Bez oryginalnego nagłówka wiadomości itp.?

Odpowiedz

5

Nie uprzedzić odpowiedź Yann, ale za to, co warte, oto pełny przykład kopiując treść wiadomości na nowa wiadomość z innym nagłówkiem akcji. Możesz dodać lub dostosować inne nagłówki również jako część przykładu. Poświęciłem zbyt dużo czasu na pisanie tego, żeby po prostu to wyrzucić. =)

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

To bardziej dokładne niż moja własna odpowiedź :-) –

+0

Wierzcie lub nie, zacząłem na nim, zanim pisał ... wtedy zadzwonił telefon ...;) –

+0

że wielkie dzięki! – Jon

20

Możesz uzyskać dostęp do treści wiadomości przy użyciu metody GetReaderAtBodyContents na wiadomość:

using (XmlDictionaryReader reader = message.GetReaderAtBodyContents()) 
{ 
    string content = reader.ReadOuterXml(); 
    //Other stuff here...     
} 
Powiązane problemy