Question

Sa situation bizarre-bizarre encore une fois:)

J'ai fonction VERIFIE XML donné contre XSD et émet une exception lorsque la validation échoue. (La fonction est appelée à partir de page Web qui reçoit les appels XML)

à la fois l'appel

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

et la fonction de validation sont assez simple

   /// <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;
        }
    }

Et cela a fonctionné très bien pour les 2 dernières années, mais récemment la fonction de validation a commencé à renvoyer le message follwing:

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

Ce qui est faux message - ni le XSD ni le XML envoyé ont changé, si je recycle en outre le pool d'applications, et envoyer le même XML à nouveau (je l'ai programme « ping » qui envoie toutes les quelques secondes, le même XML et les contrôles résultat) la validation passe ... pendant un certain temps (certains se situe entre quelques minutes et quelques heures).

Le XSD est assis dans le même répertoire que la page d'appel et dans le journal du serveur que je vois la demande au XSD avec une réponse HTTP / 200, j'ai même essayé changeing le HTTPS chemin local, mais l'erreur est resté le même (pointant à l'adresse non valide donne HTTP / 404 ou exceptions chemin non valide il ne tente de lire le fichier XSD)

Encore une fois -. Recycler le apppool résout immédiatement, mais je ne peux pas recycler toutes les 5 minutes

Merci d'avance! Simon

Était-ce utile?

La solution

Vous ne vous cette réponse, mais apparemment le XmlValidatingReader a été rendu obsolète dans .NET 2.0 ... peut-être en raison de problèmes comme celui-ci?

La suggestion est de validate l'aide d'un XmlReader. Ce lien est pour la version 2.0 des fichiers d'aide, qui comprend des détails spécifiques à la conversion d'un XmlValidatingReader; versions plus récentes de l'aide sont disponibles dans le menu déroulant en haut.

Ce lien donne des détails sur le XmlValidatingReader étant obsolète.

Un exemple d'utilisation d'un XmlReader est .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top