XmlUrlResolver Clase

Definición

Resuelve los recursos XML externos designados por un identificador uniforme de recursos (URI).

public ref class XmlUrlResolver : System::Xml::XmlResolver
public class XmlUrlResolver : System.Xml.XmlResolver
type XmlUrlResolver = class
    inherit XmlResolver
Public Class XmlUrlResolver
Inherits XmlResolver
Herencia
XmlUrlResolver

Ejemplos

En el ejemplo siguiente se crea un XmlReader objeto que usa un XmlUrlResolver objeto con credenciales predeterminadas.


// Create an XmlUrlResolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = CredentialCache.DefaultCredentials;

// Create the reader.
XmlReaderSettings settings = new XmlReaderSettings();
settings.XmlResolver = resolver;
XmlReader reader =
     XmlReader.Create("http://serverName/data/books.xml", settings);
' Create an XmlUrlResolver with default credentials.
Dim resolver As New XmlUrlResolver()
resolver.Credentials = CredentialCache.DefaultCredentials

' Create the reader.
Dim settings As New XmlReaderSettings()
settings.XmlResolver = resolver
Dim reader As XmlReader = _
   XmlReader.Create("http://serverName/data/books.xml", settings)

Comentarios

XmlUrlResolver se usa para resolver recursos XML externos, como entidades, definiciones de tipo de documento (DTD) o esquemas. También se usa para procesar los elementos de inclusión e importación que se encuentran en hojas de estilos extensible styleSheet Language (XSL) o esquemas del lenguaje de definición de esquemas XML (XSD).

XmlUrlResolver es la resolución predeterminada para todas las clases del System.Xml espacio de nombres. Es compatible con los protocolos file:// y http:// y las solicitudes de la clase WebRequest.

Importante

Los objetos XmlUrlResolver pueden contener información confidencial como, por ejemplo, credenciales de usuario. Debe tener cuidado al almacenar en caché XmlUrlResolver los objetos y no debe pasar XmlUrlResolver objetos a un componente que no es de confianza.

Resolución de DTD

Si un lector XML (XmlReader) lee un archivo XML que contiene una DTD externa, llama al XmlUrlResolver.GetEntityAsync método para obtener una representación de secuencia del DTD. Si el URI del DTD es un URI relativo, el lector XML llama al XmlUrlResolver.ResolveUri método y devuelve un URI absoluto para los parámetros y baseURi especificadosrelativeUri. XmlUrlResolver Si no sabe cómo resolver el URI, devuelve null.

El método XmlUrlResolver.GetEntity utiliza la información contenida en la propiedad Credentials según sea necesario para obtener acceso al recurso. No existe ningún descriptor de acceso get para esta propiedad por motivos de seguridad. Al sobrescribir XmlResolver, GetEntity es el método que utiliza la información de credenciales en la propiedad Credentials .

La resolución de todos los demás recursos XML es muy similar a la resolución de DTD. XmlResolver negocia la conexión con el recurso externo y devuelve una Stream representación del contenido. Objeto que realiza la llamada para XmlResolver interpretar la secuencia.

Extensión de la clase XmlUrlResolver

El objetivo predeterminado de la clase XmlUrlResolver es resolver un recurso de datos XML proveniente de su origen, no de la caché. En algunos casos, puede mejorarse el rendimiento de la aplicación si se resuelven datos que provienen de la caché, eliminando así la necesidad de realizar una transferencia con el servidor que contiene dichos datos. El aumento de rendimiento debe ponderarse con la necesidad de contar con datos actualizados.

En el ejemplo siguiente se amplía XmlUrlResolver y se compila una nueva clase, XmlCachingResolver, para recuperar recursos de la memoria caché. Esto se lleva a cabo reemplazando la propiedad XmlUrlResolver.Credentials y el método XmlUrlResolver.GetEntity.

class XmlCachingResolver : XmlUrlResolver
{
    bool enableHttpCaching;
    ICredentials credentials;

    //resolve resources from cache (if possible) when enableHttpCaching is set to true
    //resolve resources from source when enableHttpcaching is set to false
    public XmlCachingResolver(bool enableHttpCaching)
    {
        this.enableHttpCaching = enableHttpCaching;
    }

    public override ICredentials Credentials
    {
        set
        {
            credentials = value;
            base.Credentials = value;
        }
    }

    public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)
    {
        if (absoluteUri == null)
        {
            throw new ArgumentNullException("absoluteUri");
        }
        //resolve resources from cache (if possible)
        if (absoluteUri.Scheme == "http" && enableHttpCaching && (ofObjectToReturn == null || ofObjectToReturn == typeof(Stream)))
        {
            WebRequest webReq = WebRequest.Create(absoluteUri);
            webReq.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default);
            if (credentials != null)
            {
                webReq.Credentials = credentials;
            }
            WebResponse resp = webReq.GetResponse();
            return resp.GetResponseStream();
        }
        //otherwise use the default behavior of the XmlUrlResolver class (resolve resources from source)
        else
        {
            return base.GetEntity(absoluteUri, role, ofObjectToReturn);
        }
    }
}
Class XmlCachingResolver
    Inherits XmlUrlResolver
    Dim enableHttpCaching As Boolean
    Public Shadows Credentials As ICredentials

    'resolve resources from cache (if possible) when enableHttpCaching is set to true
    'resolve resources from source when enableHttpcaching is set to false
    Public Sub New(ByVal enableHttpCaching As Boolean)
        Me.enableHttpCaching = enableHttpCaching
    End Sub

    Public Shadows Function GetEntity(ByVal absoluteUri As Uri, ByVal role As String, ByVal returnType As Type) As Object
        If absoluteUri = Nothing Then
            Throw New ArgumentNullException("absoluteUri")
        End If

        'resolve resources from cache (if possible)
        If absoluteUri.Scheme = "http" And enableHttpCaching And (returnType Is GetType(Nullable) Or returnType Is GetType(Stream)) Then
            Dim webReq As WebRequest = WebRequest.Create(absoluteUri)
            webReq.CachePolicy = New HttpRequestCachePolicy(HttpRequestCacheLevel.Default)
            If Not (Credentials Is Nothing) Then
                webReq.Credentials = Credentials
            End If
            Dim resp As WebResponse = webReq.GetResponse()
            Return resp.GetResponseStream()
            'otherwise use the default behavior of the XmlUrlResolver class (resolve resources from source)
        Else
            Return MyBase.GetEntity(absoluteUri, role, returnType)
        End If

    End Function
End Class

El mecanismo de lectura desde caché de la clase XmlCachingResolver se implementa en el método GetEntity. Esto se lleva a cabo creando objetos WebRequest y HttpRequestCachePolicy nuevos. El objeto HttpRequestCachePolicy se crea utilizando el miembro Default de la enumeración HttpRequestCacheLevel.

La propiedad CachePolicy del objeto WebRequest se configura con el objeto HttpRequestCachePolicy.

Se crea una instancia de la XmlCachingResolver clase con .Boolean enableHttpCaching Cuando este valor se establece trueen , la instancia resuelve un recurso de la memoria caché predeterminada si es posible. Cuando enableHttpCaching se establece falseen , la instancia usa el comportamiento predeterminado y resuelve los recursos de su origen.

Nota

En este ejemplo se aprovecha la extensibilidad de las clases XML de la .NET Framework. Es posible extender y personalizar otras clases con el fin de que se ajusten a los requisitos de una aplicación en particular.

Constructores

XmlUrlResolver()

Inicializa una nueva instancia de la clase XmlUrlResolver.

Propiedades

CachePolicy

Obtiene o establece la directiva de caché para el objeto WebRequest subyacente.

Credentials

Establece las credenciales usadas para autenticar las solicitudes web.

Proxy

Obtiene o establece el proxy de red para el objeto WebRequest subyacente.

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetEntity(Uri, String, Type)

Asigna un identificador URI a un objeto que contiene el recurso real.

GetEntityAsync(Uri, String, Type)

Asigna asincrónicamente un identificador URI a un objeto que contiene el recurso real.

GetEntityAsync(Uri, String, Type)

Asigna asincrónicamente un identificador URI a un objeto que contiene el recurso real.

(Heredado de XmlResolver)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ResolveUri(Uri, String)

Resuelve el URI absoluto a partir de los URI base y relativo.

ResolveUri(Uri, String)

Cuando se invalida en una clase derivada, resuelve el identificador URI absoluto a partir de los identificadores URI base y relativo.

(Heredado de XmlResolver)
SupportsType(Uri, Type)

Permite al objeto Resolver devolver otros tipos además de Stream.

(Heredado de XmlResolver)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a

Consulte también