Отново е странна-странна ситуация :)
Имам функция, която проверява даден 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 минути.
Благодаря предварително! Саймън