【发布时间】:2010-12-15 01:57:02
【问题描述】:
我在应该是一个简单的问题上遇到了一些麻烦。
我有一个接受 c# 消息类型的服务方法,我只想提取该肥皂消息的正文并使用它来构造一个全新的消息。我不能在 Message 类上使用 GetBody<>() 方法,因为我不知道将正文序列化为什么类型。
有谁知道如何从邮件中提取正文?或者构造一个具有相同正文的新消息,即没有原始消息标题等?
【问题讨论】:
我在应该是一个简单的问题上遇到了一些麻烦。
我有一个接受 c# 消息类型的服务方法,我只想提取该肥皂消息的正文并使用它来构造一个全新的消息。我不能在 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();
}
}
【讨论】: