获得WCF消息的正文
我应该在一个简单的问题上遇到一些麻烦。
我有一个服务方法,它采用ac#Message类型,我想只提取该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()); Console.ReadLine(); } }
您可以使用Message上的GetReaderAtBodyContents方法访问消息正文:
using (XmlDictionaryReader reader = message.GetReaderAtBodyContents()) { string content = reader.ReadOuterXml(); //Other stuff here... }
访问邮件正文时,邮件状态将更改,并且将不再允许使用邮件内容。 为避免这种情况,重要的是缓冲消息并使用缓冲区本身的CreateMessage
方法设置原始消息。
码:
上述就是C#学习教程:获得WCF消息的正文分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
Public Function AfterReceiveRequest(ByRef message As System.ServiceModel.Channels.Message, ByVal channel As IClientChannel, ByVal instanceContext As InstanceContext) As Object Implements IDispatchMessageInspector.AfterReceiveRequest Try Dim msgBuffer As MessageBuffer = message.CreateBufferedCopy(Int32.MaxValue) message = msgBuffer.CreateMessage() Dim copy As Message = msgBuffer.CreateMessage() Dim writer As XmlWriter = XmlWriter.Create(Console.OpenStandardOutput(), Me.xws) copy.WriteMessage(writer) writer.Flush() Console.WriteLine() msgBuffer.Close() Dim buffer As MessageBuffer = message.CreateBufferedCopy(Int32.MaxValue) message = buffer.CreateMessage() Dim copym As Message = buffer.CreateMessage() Dim bodyReader As XmlDictionaryReader = copym.GetReaderAtBodyContents() Dim newMessage = System.ServiceModel.Channels.Message.CreateMessage(MessageVersion.[Default], "newAction", bodyReader) Dim content As String = bodyReader.ReadOuterXml() Console.WriteLine(message.Properties.Via) Console.WriteLine(content) Catch ex As Exception Throw GetFaultException("ReportGenerator Request - error: ", "", ex) End Try End Sub
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1031058.html