及其怪异-怪异情况再次:)

[我已功能,鉴于XML对XSD验证,当验证失败抛出异常。 (功能被从网页接收XML调用调用)

两个呼叫

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

和验证函数是相当简单的

   /// <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年,但最近的验证功能开始返回follwing消息:

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

这是假消息 - 无论是XSD也不SENT XML已经改变,而且如果我回收应用程序池,并再次发送相同的XML(我的“ping”程序,将相同的XML每隔几秒钟,并检查结果)验证通过...一会儿(一些是几分钟至几小时)之间。

在XSD是坐在相同的目录中调用页并在服务器日志I看到的请求与HTTP / 200响应的XSD,我甚至试图量变到质变的HTTPS到本地路径,但该错误保持不变(指向到无效地址给HTTP / 404或无效路径异常,以便它试图读取XSD文件)

再次 - 回收程序池做出决议它立即但我不能每5分钟回收

提前感谢! 西蒙

有帮助吗?

解决方案

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

在建议是验证使用XmlReader 。这种联系是2.0版本的帮助文件,其中包括一些具体的细节,从一个XmlValidatingReader转换;更近的帮助版本可从下拉顶部。

此链接给出了有关的详细信息所述XmlValidatingReader是过时的。

使用XmlReader的一个例子是 href="https://stackoverflow.com/questions/630641/xmlvalidatingreader-class-is-obsolete">。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top