我试图验证WC消息的身体和越来越例外错误验证邮件正文
“到‘ValidateEndElement’方法的调用不匹配‘ValidateElement’方法的相应的呼叫。”
using (MessageBuffer messageBuffer = message.CreateBufferedCopy(int.MaxValue))
{
Message copiedMessage = messageBuffer.CreateMessage();
using (var xreader = XmlReader.Create(
copiedMessage.GetReaderAtBodyContents(), xmlReaderSettings))
{
while (xreader.Read()) ;
}
message = messageBuffer.CreateMessage();
}
XmlSchemaSet中和读取器设置在分开的方法
xmlReaderSettings = new XmlReaderSettings
{
ValidationType = ValidationType.Schema,
Schemas = this.xmlSchemaSet,
ConformanceLevel = ConformanceLevel.Auto
};
xmlReaderSettings.ValidationEventHandler += (o, e) =>
{
if (e.Severity == XmlSeverityType.Error)
throw new ContractXmlSchemaValidationException(e.Message);
};
要创建WCF消息加载(其中消息体变量保持体XML)
Message msg = null;
var reader = XmlReader.Create(new StringReader(messageBody));
msg = Message.CreateMessage(MessageVersion.Soap12, "http://mysoapAction", reader);
msg.Headers.Add(MessageHeader.CreateHeader("To", "http://schemas.microsoft.com/ws/2005/05/addressing/none", "http://localhost/Service/Service1.svc"));
您是否有示例消息? – 2011-05-02 15:04:28
更新了创建消息的代码,基本上任何xmlelement都有一个有效的模式来验证 – 2011-05-02 15:11:01