获取WCF消息的文本一个简单的问题我应该会遇到一些麻烦。我有一个采用c#Message类型的服务方法,我只想提取该soap消息的文本并使用它来构建一个全新的消息。我不能在Message类上使用GetBody()方法,因为我不知道序列化正文的类型。有谁知道如何从消息中提取正文?或者构造一个具有相同正文的新消息,即没有原始消息头等?不是为了取代Yann的答案,而是为了它的价值,这里有一个将消息正文复制到具有不同操作标头的新消息的完整示例。您还可以添加或自定义其他标头作为示例的一部分。我花了太多时间把它写下来然后扔掉。=)classProgram{[DataContract]publicclassPerson{[DataMember]publicstringFirstName{get;放;}[DataMember]publicstringLastName{get;放;}publicoverridestringToString(){returnstring.Format("{0},{1}",LastName,FirstName);}}staticvoidMain(string[]args){varperson=newPerson{FirstName="Joe",LastName="Schmo"};varmessage=System.ServiceModel.Channels.Message.CreateMessage(MessageVersion.Default,"action",person);varreader=message.GetReaderAtBodyContents();varnewMessage=System.ServiceModel.Channels.Message.CreateMessage(MessageVersion.Default,"newAction",reader);控制台.WriteLine(消息);控制台.WriteLine();控制台.WriteLine(newMessage);控制台.WriteLine();Console.WriteLine(newMessage.GetBody());控制台.ReadLine();}}您可以使用Message上的GetReaderAtBodyContents方法访问消息文本:using(XmlDictionaryReaderreader=message.GetReaderAtBodyContents()){stringcontent=reader.ReadOuterXml();//其他rstuffhere...}当消息文本被访问时,消息状态将改变,消息内容的使用将不再被允许。为避免这种情况,重要的是缓冲消息并使用缓冲区本身的CreateMessage方法设置原始消息。代码:以上是C#学习教程:获取WCF消息文本分享的全部内容。如果对大家有用,需要详细了解C#学习教程,希望大家多加关注—PublicFunctionAfterReceiveRequest(ByRefmessageAsSystem.ServiceModel.Channels.Message,ByValchannelAsIClientChannel,ByValinstanceContextAsInstanceContext)作为对象实现IDispatchMessageInspector.AfterReceiveRequest尝试DimmsgBufferAsMessageBuffer=message.CreateBufferedCopy(Int32.MaxValue)message=msgBuffer.CreateMessage()DimcopyAsMessage=msgBuffer.CreateMessage()DimwriterAsXmlWriter=XmlWriter.Create(Console.OpenStandardOutput(),Me.xws)copy.WriteMessage(writer)writer.Flush()Console.WriteLine()msg??Buffer.Close()DimbufferAsMessageBuffer=message.CreateBufferedCopy(Int32.MaxValue)message=buffer.CreateMessage()DimcopymAs复制代码消息=buffer.CreateMessage()DimbodyReaderAsXmlDictionaryReader=copym.GetReaderAtBodyContents()DimnewMessage=System.ServiceModel.Channels.Message.CreateMessage(MessageVersion.[Default],"newAction",bodyReader)DimcontentAsString=bodyReader.ReadOuterXml()Console.WriteLine(message.Properties.Via)Console.WriteLine(content)CatchexAsException抛出GetFaultException("ReportGeneratorRequest-error:","",ex)EndTryEndSub本文采集自网络,不代表立场,如涉及侵权,请点右联系管理员删除,如需转载请注明出处:
