XmlUrlResolver Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
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
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 Boolean
enableHttpCaching
. 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
- documentos XML y de datos