又是奇怪的情况:)
我有一个函数可以根据 XSD 验证给定的 XML,并在验证失败时抛出异常。(该函数从接收 xml 调用的 WebPage 调用)
既通话
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 年中运行良好,但最近验证函数开始返回以下消息:
[ValidationError]Circular attribute group reference.[/ValidationError]
这是错误消息 - XSD 和发送的 XML 都没有改变,此外,如果我回收应用程序池并再次发送相同的 XML(我已经“ping”了每隔几秒发送相同 XML 并检查结果的程序)验证通过......一段时间(有些在几分钟到几个小时之间)。
XSD 与调用页面位于同一目录中,在服务器日志中我看到对 XSD 的请求带有 HTTP/200 响应,我什至尝试将 HTTPS 更改为本地路径,但错误保持不变(指向无效地址给出 HTTP/404 或无效路径异常,因此它会尝试读取 XSD 文件)
再次 - 回收应用程序池会立即解决它,但我不能每 5 分钟回收一次。
提前致谢!西蒙