2009-11-10 13 views
9

私は単純な問題であるはずのものに少し問題があります。WCfメッセージの本文を取得する

私はC#メッセージタイプを取るサービスメソッドを持っていますが、私はそのSOAPメッセージの本文を抽出して完全に新しいメッセージを作成するのに使いたいと思います。本文をシリアル化するタイプがわからないため、MessageクラスのGetBody<>()メソッドを使用することはできません。

メッセージから本文を抽出する方法を知っている人はいますか?または、元のメッセージヘッダーなどを使用せずに、同じ本文を持つ新しいメッセージを作成しますか?

答えて

5

ヤンの答えを先取りしていないが、それは価値がある何のために、ここにメッセージ本文をコピーする完全な例です別のアクションヘッダーを持つ新しいメッセージこの例の一部として他のヘッダーを追加したりカスタマイズしたりすることもできます。私はこれを書いてあまりにも多くの時間を費やして、それを放棄しただけです。 =)

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

あなたが投稿する前に –

+0

は信じられないかもしれません:-)それは私自身の答えよりも徹底しただ、私はそれを開始した...その後、電話が鳴った...;) –

+0

おかげでその素晴らしいです! – Jon

20

あなたがメッセージにGetReaderAtBodyContentsメソッドを使用して、メッセージの本文にアクセスすることができます。

using (XmlDictionaryReader reader = message.GetReaderAtBodyContents()) 
{ 
    string content = reader.ReadOuterXml(); 
    //Other stuff here...     
} 
関連する問題