“循环属性组参考”。

“循环属性组参考”。

问题描述:

它的奇怪怪异的情况再次:)“循环属性组参考”。

我已经验证给定的XML对XSD的功能,并在验证失败时抛出异常。

两个呼叫

if (!xmlvld.ValidXmlDoc(X, "", "https://somepathtofile.xsd")) 
    throw new Exception(xmlvld.ValidationError + "1"); 

(该功能是从网页接收XML调用调用)和验证功能是相当简单的

/// <summary> 
    /// This method validates an xml string against an xml schema. 
    /// </summary> 
    /// <param name="xml">StringReader containing xml</param> 
    /// <param name="schemaNamespace">XML Schema Namespace</param> 
    /// <param name="schemaUri">XML Schema Uri</param> 
    /// <returns>bool</returns> 
    public bool ValidXmlDoc(StringReader xml, string schemaNamespace, string schemaUri) 
    { 
     // Continue? 
     if (xml == null || schemaNamespace == null || schemaUri == null) 
     { 
      return false; 
     } 

     isValidXml = true; 
     XmlValidatingReader vr; 
     XmlTextReader tr; 
     XmlSchemaCollection schemaCol = new XmlSchemaCollection(); 
     schemaCol.Add(schemaNamespace, schemaUri); 

     try 
     { 
      // Read the xml. 
      tr = new XmlTextReader(xml); 
      // Create the validator. 
      vr = new XmlValidatingReader(tr); 
      // Set the validation tyep. 
      vr.ValidationType = ValidationType.Auto; 
      // Add the schema. 
      if (schemaCol != null) 
      { 
       vr.Schemas.Add(schemaCol); 
      } 
      // Set the validation event handler. 
      vr.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack); 
      // Read the xml schema. 
      while (vr.Read()) 
      { 
      } 

      vr.Close(); 

      return isValidXml; 
     } 
     catch (Exception ex) 
     { 
      this.ValidationError = ex.Message; 
      return false; 
     } 
     finally 
     { 
      // Clean up... 
      vr = null; 
      tr = null; 
     } 
    } 

这工作得很好,最后2但最近验证功能开始返回以下消息:

[ValidationError]Circular attribute group reference.[/ValidationError] 

这是错误的信息 - 既不是XSD也不是发送的XML已经更改,此外如果我回收应用程序池,并再次发送相同的XML(我已经“ping”程序每隔几秒发送一次相同的XML并检查结果)验证通过...一段时间(有些是在几分钟到几个小时之间)。

XSD与调用页面位于同一目录中,并且在服务器日志中,我看到了使用HTTP/200响应的XSD请求,我甚至尝试将HTTPS更改为本地路径,但错误保持不变(指向无效的地址给HTTP/404或无效路径异常,所以它试图读取XSD文件)

再次 - 回收程序池立即解决它,但我不能每5分钟循环。

在此先感谢! 西蒙

+0

你的xml和xsd的样本会有所帮助。 – Kev 2011-01-05 15:21:21

+0

什么触发验证?这种情况发生的频率如何? – 2011-01-05 19:57:36

+0

@Kev - 在XML实例ANS XSD是一个想我不能上传,然而,当我写了 - 无论是XSD和XML都很好 - 回收应用程序池后,他们都很好地工作。 @James B - 每次收到XML请求时都会执行验证,aprox。 100次/分 – SimSimY 2011-01-06 07:08:14

你不会喜欢这个答案,但显然XmlValidatingReader被废弃在.NET 2.0 ...也许是因为问题也是这样吗?

的建议是validate using an XmlReader。该链接适用于帮助文件的2.0版本,其中包括一些特定于从XmlValidatingReader转换的详细信息;可以从顶部的下拉菜单中获得更新版本的帮助。

This link提供有关XmlValidatingReader是过时的信息。

使用XmlReader的一个例子是here

+0

对不起,延迟 - 你说得对。我不喜欢它,但你是对的。 – SimSimY 2011-09-07 10:55:49