繁体   English   中英

获得WCF消息的正文

[英]Get Just the Body of a WCf Message

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

我有一个服务方法,它采用ac#Message类型,我想只是提取该soap消息的主体并使用它来构造一个全新的消息。 我不能在Message类上使用GetBody<>()方法,因为我不知道序列化主体的类型。

有没有人知道如何从消息中提取身体? 或者构造一个具有相同主体的新消息,即没有原始消息头等?

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

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

不是为了取代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();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM