2011-02-01 101 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()) 
      { 
      } 
     } 
    } 
} 
相關問題