C# · 12月 28, 2021

c# – 获取WCF消息的正文

我有一个麻烦,应该是一个简单的问题.

我有一个服务方法,它接收一个c#消息类型,我想要提取该soap消息的正文,并使用它来构造一个全新的消息.我不能在Message类中使用GetBody<>()方法,因为我不知道什么类型的序列化身体.

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

解决方法 不要抢占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(); }}