«Круговая ссылка группы атрибута».
-
25-09-2019 - |
Вопрос
Это странная странная ситуация еще раз :)
У меня функция, которая проверяет данную 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)
Опять же, переработка AppPool отремонтирует его немедленно, но я не могу перерабатывать каждые 5 минут.
Заранее спасибо! Симон
Решение
Вам не понравится этот ответ, но, видимо, XmlValidatingReader
был устарел в .NET 2.0 ... Возможно из-за таких вопросов?
Предложение заключается в проверяйте с помощью AN XmlReader
. Отказ Эта ссылка предназначена для версии справочных файлов 2.0, которая включает в себя некоторые детали, специфичные для преобразования из XmlValidatingReader
; Более поздние версии справки доступны от выпадающего на вершине.
Эта ссылка дает подробности о XmlValidatingReader
быть устаревшим.
Пример использования XmlReader
является здесь.