在没有OuterXML的情况下验证(和查询)XmlElement内容?
问题描述:
我有一个签名的Web方法(SOAP Web服务中):在没有OuterXML的情况下验证(和查询)XmlElement内容?
public msgResponse myWebMethod([XmlAnyElement] XmlElement msgRequest)
我选择使用XmlElement
参数reading后,它将让我在履行我自己的XSD验证参数。问题是这个参数可能相当于大(最多80Mb的XML),所以调用XmlElement.OuterXML()
就像链接中建议的那样不是一个非常实用的方法。
是否有另一种方法来验证XSD的XmlElement对象?
更一般地说,这是一种实现期待大量XML的Web服务的不恰当方法吗?我在使用SoapExtensions直接访问输入流时遇到了一些提示,但我不确定这是否适合我的情况。
注意:不幸的是,我被链接到一个现有的WSDL和XSD,我没有权力改变这就是为什么我首先使用非WCF实现的原因。
答
下面是一个简单的例子。只需将您的XmlElement
传递给此方法:
private static void TheAnswer(IXPathNavigable inputElement)
{
var schemas = new XmlSchemaSet();
schemas.Add("http://foo.org/importvalidator.xsd",
@"..\..\validator.xsd");
var settings = new XmlReaderSettings
{
Schemas = schemas,
ValidationFlags =
XmlSchemaValidationFlags.
ProcessIdentityConstraints |
XmlSchemaValidationFlags.
ReportValidationWarnings,
ValidationType = ValidationType.Schema
};
settings.ValidationEventHandler +=
(sender, e) =>
Console.WriteLine("{0}: {1}", e.Severity, e.Message);
using (
XmlReader documentReader =
inputElement.CreateNavigator().ReadSubtree())
{
using (
XmlReader validatingReader = XmlReader.Create(
documentReader, settings))
{
while (validatingReader.Read())
{
}
}
}
}
为什么现有的WSDL和XSD会阻止您使用WCF? – 2011-02-02 00:51:14