Я пытаюсь проверить тело сообщения 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 (где переменная messageBody содержит тело 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"));