Pregunta

Es la situación extraña, rara vez más:)

Me he función que verifica dados XML con XSD y lanza una excepción cuando falla la validación. (Se llama la función de página web que recibe las llamadas XML)

tanto la llamada

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

y la función de validación son bastante simples

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

Y esto funcionó muy bien durante los últimos 2 años, pero recientemente la función de validación comenzó a devolver el mensaje siguientes aparatos:

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

Lo cual es falso mensaje - ni el ni el XSD XML enviados han cambiado, por otra parte, si Reciclo el grupo de aplicaciones, y enviar el mismo XML de nuevo (no tengo programa de "ping" que envía el mismo XML cada pocos segundos y cheques el resultado) la validación pasa ... por un tiempo (algunos es de entre unos minutos y unas horas).

El XSD está sentado en el mismo directorio que la página que llama y en el servidor de registro veo la solicitud a la XSD con respuesta HTTP / 200, incluso intenté changeing el HTTPS para ruta local pero el error sigue siendo el mismo (que apunta a dirección no válida da HTTP / 404 o ruta no válida excepciones por lo que hace intento de leer el archivo XSD)

Una vez más -. Reciclaje de los resuelve AppPool inmediatamente pero no puedo reciclar cada 5 minutos

Gracias de antemano! Simon

¿Fue útil?

Solución

No se como esta respuesta, pero al parecer el XmlValidatingReader se obsoleto en .NET 2.0 ... quizás debido a problemas como éste?

La sugerencia es validar el uso de un XmlReader . Ese vínculo es para la versión 2.0 de los archivos de ayuda, que incluye algunos detalles específicos para la conversión de un XmlValidatingReader; Las versiones más recientes de la ayuda están disponibles en el menú desplegable en la parte superior.

Este enlace da detalles acerca la XmlValidatingReader ser obsoleta.

Un ejemplo del uso de un XmlReader es aquí .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top