Frage

Es ist die seltsam seltsam Situation wieder:)

Ich habe Funktion, dass überprüft XML gegen XSD gegeben und Ausnahme auslöst, wenn die Überprüfung fehlschlägt. (Die Funktion wird von WebPage genannt, die die XML-Anrufe empfangen)

sowohl der Anruf

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

und die Validierung Funktion ist ziemlich einfach

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

Und das funktionierte sehr gut für die letzten 2 Jahre, aber vor kurzem der Validierungsfunktion begann die follwing Nachricht zurück:

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

Welche falsche Botschaft ist - weder die XSD noch die abgeschickt XML haben sich geändert, außerdem, wenn ich die Anwendung Pool recyceln, und die gleiche XML senden wieder (ich habe „ping“ Programm, das alle paar Sekunden und prüft die gleiche XML sendet das Ergebnis) die Validierung passiert ... eine Zeit lang (etwas zwischen wenigen Minuten und einigen Stunden).

Die XSD wird im selben Verzeichnis wie die anrufende Seite sitzt und in dem Server anmelden ich die Anfrage an die XSD sehe mit HTTP / 200 Antwort, ich habe sogar versucht, die HTTPS zu lokalem Pfad changeing aber der Fehler gleich geblieben (Zeigte ungültige Adresse Ausnahmen HTTP / 404 oder ungültiger Pfad gibt so tut es Versuch, die XSD-Datei)

zu lesen

Wieder -. Recycling der AppPool löst es sofort, aber ich kann alle 5 Minuten nicht recyceln

Vielen Dank im Voraus! Simon

War es hilfreich?

Lösung

Sie werden nicht wie diese Antwort, aber anscheinend wurde die XmlValidatingReader in .NET 2.0 veraltet ... vielleicht wegen Fragen wie diese?

Der Vorschlag ist auf Validate ein mit XmlReader . Diese Verbindung ist für die 2.0-Version der Hilfedateien, die Umwandlung von einem XmlValidatingReader einige spezifische Details enthält; neuere Versionen der Hilfe sind aus dem Drop-down an der Spitze zur Verfügung.

Dieser Link etwa gibt Details die XmlValidatingReader veraltet zu sein.

Ein Beispiel für eine XmlReader verwendet, ist hier .

scroll top