Compartir vía


XmlUrlResolver Clase

Definición

Resuelve los recursos XML externos denominados 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 que usa un XmlUrlResolver 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 elementos de inclusión e importación que se encuentran en hojas de estilos de Lenguaje extensible styleSheet (XSL) o esquemas del lenguaje de definición de esquemas XML (XSD).

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

Importante

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

Resolución de DTD

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

El método XmlUrlResolver.GetEntity usa la información de la propiedad Credentials según corresponda para obtener acceso al recurso. No hay ningún descriptor de acceso get a esta propiedad por motivos de seguridad. Al sobrescribir , 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 representación Stream del contenido. El objeto que realiza la llamada a XmlResolver interpreta la secuencia.

Extensión de la clase XmlUrlResolver

El comportamiento predeterminado de la clase XmlUrlResolver es resolver un recurso de datos XML desde su origen, no desde la memoria caché. En algunos casos, resolver un recurso de datos de la memoria caché puede mejorar el rendimiento de una aplicación guardando un viaje al servidor del recurso de datos. Las mejoras de rendimiento aquí deben pesarse en contra de la necesidad de up-tocontenido de fecha.

En el ejemplo siguiente se extiende XmlUrlResolver y se compila una nueva clase, XmlCachingResolver, para recuperar recursos de la memoria caché. Esto se hace 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 comportamiento de almacenamiento en caché de la clase XmlCachingResolver se implementa en el método GetEntity. Para ello, se crean nuevos objetos WebRequest y HttpRequestCachePolicy. El objeto HttpRequestCachePolicy se crea mediante el miembro Default de la enumeración HttpRequestCacheLevel.

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

Se crea una instancia de la clase XmlCachingResolver con el BooleanenableHttpCaching. Cuando este valor se establece en true, la instancia resuelve un recurso de la caché predeterminada si es posible. Cuando enableHttpCaching se establece en false, 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 en .NET Framework. Otras clases se pueden ampliar y personalizar para satisfacer las necesidades de una aplicación determinada.

Constructores

XmlUrlResolver()

Inicializa una nueva instancia de la clase XmlUrlResolver.

Propiedades

CachePolicy

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

Credentials

Establece las credenciales usadas para autenticar las solicitudes web.

Proxy

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

Métodos

Equals(Object)

Determina si el objeto especificado es igual al objeto actual.

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

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

GetEntityAsync(Uri, String, Type)

Asigna de forma asincrónica un URI a un objeto que contiene el recurso real.

GetEntityAsync(Uri, String, Type)

Asigna de forma asincrónica un URI a un objeto que contiene el recurso real.

(Heredado de XmlResolver)
GetHashCode()

Actúa como función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
ResolveUri(Uri, String)

Resuelve el URI absoluto de los URI base y relativos.

ResolveUri(Uri, String)

Cuando se reemplaza en una clase derivada, resuelve el URI absoluto de los URI base y relativos.

(Heredado de XmlResolver)
SupportsType(Uri, Type)

Permite al solucionador devolver tipos distintos de Stream.

(Heredado de XmlResolver)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a

Consulte también