我有一个Web方法(在SOAP服务中),其签名为:
public msgResponse myWebMethod([XmlAnyElement] XmlElement msgRequest)我选择在XmlElement之后使用阅读参数,它允许我对参数执行自己的XSD验证。问题是,参数可以是相当大的(最多80‘t的XML),因此按照链接中的建议调用XmlElement.OuterXML()并不是一种非常实用的方法。
还有另一种方法来根据XSD?验证XmlElement对象吗?
更普遍地说,这是否是实现web服务需要大量XML的不适当方法?我遇到了一些使用SoapExtensions直接访问输入流的提示,但我不确定这是适合我的情况的正确方法。
备注:不幸的是,我被链接到了一个现有的和XSD上,我没有能力修改它,这就是为什么我一开始就使用了一个非WCF实现。
发布于 2011-02-02 01:39:19
下面是一个简单的例子。只需将您的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())
{
}
}
}
}https://stackoverflow.com/questions/4868369
复制相似问题