Опять странная-странная ситуация :)
У меня есть функция, которая проверяет данный 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 лет, но недавно функция проверки начала возвращать следующее сообщение:
[ValidationError]Circular attribute group reference.[/ValidationError]
Что является ложным сообщением - ни XSD, ни отправленный XML не изменились, более того, если я перезапущу пул приложений и снова отправлю тот же XML (у меня есть программа "ping", которая отправляет один и тот же XML каждые несколько секунд и проверяет результат) проверка проходит... некоторое время (иногда от нескольких минут до нескольких часов).
XSD находится в том же каталоге, что и вызывающая страница, и в журнале сервера я вижу запрос к XSD с ответом HTTP/200, я даже пытался изменить HTTPS на локальный путь, но ошибка осталась прежней (указывая на неверный адрес выдает исключения HTTP/404 или недопустимого пути, поэтому он пытается прочитать файл XSD)
Опять же - перезапуск пула приложений решает его немедленно, но я не могу перерабатывать каждые 5 минут.
Заранее спасибо! Саймон