2011-02-01 71 views
2

我有一个签名的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实现的原因。

+0

为什么现有的WSDL和XSD会阻止您使用WCF? – 2011-02-02 00:51:14

回答

2

下面是一个简单的例子。只需将您的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()) 
      { 
      } 
     } 
    } 
} 
相关问题