【问题标题】:Get Just the Body of a WCf Message只获取 WCf 消息的正文
【发布时间】:2010-12-15 01:57:02
【问题描述】:

我在应该是一个简单的问题上遇到了一些麻烦。

我有一个接受 c# 消息类型的服务方法,我只想提取该肥皂消息的正文并使用它来构造一个全新的消息。我不能在 Message 类上使用 GetBody<>() 方法,因为我不知道将正文序列化为什么类型。

有谁知道如何从邮件中提取正文?或者构造一个具有相同正文的新消息,即没有原始消息标题等?

【问题讨论】:

    标签: c# xml wcf soap


    【解决方案1】:

    您可以使用 Message 上的 GetReaderAtBodyContents 方法访问消息正文:

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

    【讨论】:

      【解决方案2】:

      不是抢占 Yann 的答案,而是为了它的价值,这里有一个完整的示例,将消息正文复制到具有不同操作标头的新消息中。您也可以添加或自定义其他标题作为示例的一部分。我花了太多时间写这篇文章,只是把它扔掉了。 =)

      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();
          }
      }
      

      【讨论】:

      • 比我自己的回答更彻底:-)
      • 信不信由你,我在你发帖之前就开始了……然后电话响了……;)
      猜你喜欢
      • 1970-01-01
      • 2011-01-12
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 2013-03-30
      相关资源
      最近更新 更多