读取请求消息正文时出错
Posted
技术标签:
【中文标题】读取请求消息正文时出错【英文标题】:Error while reading body of request message 【发布时间】:2016-03-04 01:53:26 【问题描述】:我需要阅读 WCF 项目中的消息内容,例如
var messageContent = Encoding.UTF8.GetString(OperationContext.Current.RequestContext.RequestMessage.GetBody<byte[]>());
但结果我得到了一个错误:
期望来自命名空间的元素“base64Binary” 'http://schemas.microsoft.com/2003/10/Serialization/'..遇到 名称为“人类”的“元素”,命名空间 'http://numans.hr-xml.org/2007-04-15'。
你能告诉我我做错了什么吗?
我发送的内容是:
<Human xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://numans.hr-xml.org/2007-04-15">
<HumanId>
<guid>c2ee9a7e-c7a8-48e0-910b-47c2012bfa8e</guid>
</HumanId>
...
</Human>
我还尝试阅读以下内容:
var messageContent = OperationContext.Current.RequestContext.RequestMessage.ToString();
消息内容的结果:
...流...
【问题讨论】:
你能把这两个方法调用分开并确定它在哪里抛出吗?GeyBody
或 GetString
?
GetBody()
的问题
【参考方案1】:
GetBody<T>
is used to deserialize the message body as type T. 因此,当您调用GetBody<byte[]>()
时,反序列化器需要base64 编码的二进制数据,但会找到<Human>
元素。
如果您只想将邮件正文读取为string
,请使用GetReaderAtBodyContents
,它返回一个XmlDictionaryReader
,您可以在其中使用ReadOuterXml()
。
如果您想将正文作为输入内容读取,请从其 XML 表示创建一个 Human
类并使用 GetBody<Human>()
。
【讨论】:
谢谢。我用过:using (var reader = context.RequestContext.RequestMessage.GetReaderAtBodyContents())Content = reader.ReadOuterXml();
以上是关于读取请求消息正文时出错的主要内容,如果未能解决你的问题,请参考以下文章