XmlResolver 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 XmlResolver abstract
public abstract class XmlResolver
type XmlResolver = class
Public MustInherit Class XmlResolver
- Herencia
-
XmlResolver
- Derivado
Ejemplos
En el ejemplo siguiente se crea un XmlUrlResolver con credenciales predeterminadas. XmlReader Se usa para leer y mostrar el flujo de datos resultante.
using System;
using System.Xml;
using System.IO;
class Example
{
static void Main()
{
// Create an XmlUrlResolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
// Point the resolver at the desired resource and resolve as a stream.
Uri baseUri = new Uri("http://serverName/");
Uri fulluri = resolver.ResolveUri(baseUri, "fileName.xml");
Stream s = (Stream)resolver.GetEntity(fulluri, null, typeof(Stream));
// Create the reader with the resolved stream and display the data.
XmlReader reader = XmlReader.Create(s);
while (reader.Read())
{
Console.WriteLine(reader.ReadOuterXml());
}
}
}
Imports System.Xml
Imports System.IO
Module Module1
Sub Main()
' Create an XmlUrlResolver with default credentials.
Dim resolver As New XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
' Point the resolver at the desired resource and resolve as a stream.
Dim baseUri As New Uri("http://serverName/")
Dim fulluri As Uri = resolver.ResolveUri(baseUri, "fileName.xml")
Dim s As Stream = CType(resolver.GetEntity(fulluri, Nothing, GetType(Stream)), Stream)
' Create the reader with the resolved stream and display the data.
Dim reader As XmlReader = XmlReader.Create(s)
While reader.Read()
Console.WriteLine(reader.ReadOuterXml())
End While
End Sub
End Module
Comentarios
El XmlResolver tipo 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 del lenguaje de hoja de estilos extensible (XSL) o esquemas del lenguaje de definición de esquemas XML (XSD).
XmlResolver controla todos los aspectos de la negociación de la conexión a los recursos, incluido el control de las credenciales de seguridad, la apertura de la conexión al origen de datos y la devolución del recurso en forma de flujo u otro tipo de objeto. El objeto que llama XmlResolver tiene la tarea de interpretar la secuencia.
El System.Xml espacio de nombres incluye la siguiente implementación concreta de la XmlResolver clase :
-
XmlUrlResolver es la resolución predeterminada para todas las clases del System.Xml espacio de nombres. Soporta los protocolos
file://yhttp://y las solicitudes de la clase System.Net.WebRequest. Para obtener ejemplos de extensión de la clase para mejorar el rendimiento, consulte la XmlUrlResolver página de referencia.
Puede crear y especificar su propio solucionador. Si no especifica un solucionador, el lector usa un valor predeterminado XmlUrlResolver sin credenciales de usuario.
Especifique el objeto XmlResolver que se va a usar estableciendo la XmlReaderSettings.XmlResolver propiedad y pasando el XmlReaderSettings objeto al Create método .
Si el recurso se almacena en un sistema que requiere autenticación, use la XmlResolver.Credentials propiedad para especificar las credenciales necesarias.
Proporcionar credenciales de autenticación
El archivo que contiene los datos XML que se van a leer puede tener una directiva de acceso restringido. Si se requiere autenticación para acceder a un recurso de red, use la Credentials propiedad para especificar las credenciales necesarias. Si no se establece la Credentials propiedad , las credenciales se establecen en null.
Por ejemplo, supongamos que se necesitan credenciales al solicitar datos de la web con fines de autenticación. A menos que el directorio virtual web permita el acceso anónimo, debe establecer la Credentials propiedad para proporcionar credenciales. En el ejemplo siguiente se crea un objeto XmlReader que usa XmlUrlResolver con credenciales predeterminadas para acceder al sitio http://localhost/bookstore/inventory.xml.
// Create a resolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
// Set the reader settings object to use the resolver.
settings.XmlResolver = resolver;
// Create the XmlReader object.
XmlReader reader = XmlReader.Create("http://ServerName/data/books.xml", settings);
' Create a resolver with default credentials.
Dim resolver as XmlUrlResolver = new XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
' Set the reader settings object to use the resolver.
settings.XmlResolver = resolver
' Create the XmlReader object.
Dim reader as XmlReader = XmlReader.Create("http://ServerName/data/books.xml", settings)
Puede proporcionar credenciales diferentes para diferentes URI y agregarlas a una memoria caché. Estas credenciales se usan para comprobar la autenticación de los distintos URI independientemente del origen original del XML. En el ejemplo siguiente se muestra cómo agregar credenciales a una memoria caché.
// Create the credentials.
NetworkCredential myCred = new NetworkCredential(UserName,SecurelyStoredPassword,Domain);
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri("http://www.contoso.com/"), "Basic", myCred);
myCache.Add(new Uri("http://app.contoso.com/"), "Basic", myCred);
// Set the credentials on the XmlUrlResolver object.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = myCache;
// Compile the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("http://serverName/data/xsl/order.xsl",XsltSettings.Default, resolver);
' Create the credentials.
Dim myCred As NetworkCredential = New NetworkCredential(UserName,SecurelyStoredPassword,Domain)
Dim myCache As CredentialCache = New CredentialCache()
myCache.Add(new Uri("http://www.contoso.com/"), "Basic", myCred)
myCache.Add(new Uri("http://app.contoso.com/"), "Basic", myCred)
' Set the credentials on the XmlUrlResolver object.
Dim resolver As XmlUrlResolver = New XmlUrlResolver()
resolver.Credentials = myCache
' Compile the style sheet.
Dim xslt As XslCompiledTransform = New XslCompiledTransform()
xslt.Load("http://serverName/data/xsl/order.xsl", XsltSettings.Default, resolver)
Consideraciones de seguridad
Tenga en cuenta los siguientes elementos al trabajar con la XmlResolver clase .
XmlResolver los objetos pueden contener información confidencial, como las credenciales de usuario. Debe tener cuidado al almacenar en caché objetos XmlResolver y no debe pasar el objeto XmlResolver a un componente no confiable.
Si va a diseñar una propiedad de clase que usa la clase XmlResolver, la propiedad debe definirse como una propiedad de solo escritura. La propiedad se puede usar para especificar el XmlResolver objeto que se va a usar, pero no se puede usar para devolver un XmlResolver objeto .
Si su aplicación acepta XmlResolver objetos de código no confiable, no puede suponer que el URI pasado al método GetEntity será el mismo que el devuelto por el método ResolveUri. Las clases derivadas de la XmlResolver clase pueden invalidar el GetEntity método y devolver datos distintos de los contenidos en el URI original.
La aplicación puede mitigar las amenazas de denegación de servicio de memoria al método GetEntity mediante la implementación de un IStream que limita el número de bytes leídos. Esto ayuda a protegerse frente a situaciones en las que el código malintencionado intenta pasar una secuencia infinita de bytes al GetEntity método .
Constructores
| Nombre | Description |
|---|---|
| XmlResolver() |
Inicializa una nueva instancia de la clase XmlResolver. |
Propiedades
| Nombre | Description |
|---|---|
| Credentials |
Cuando se reemplaza en una clase derivada, establece las credenciales usadas para autenticar solicitudes web. |
| FileSystemResolver |
Obtiene un solucionador XML que resuelve solo los URI del sistema de archivos. |
| ThrowingResolver |
Obtiene un solucionador XML que prohíbe la resolución de entidades. |
Métodos
| Nombre | Description |
|---|---|
| Equals(Object) |
Determina si el objeto especificado es igual al objeto actual. (Heredado de Object) |
| GetEntity(Uri, String, Type) |
Cuando se reemplaza en una clase derivada, 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. |
| 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) |
Cuando se reemplaza en una clase derivada, resuelve el URI absoluto de los URI base y relativos. |
| SupportsType(Uri, Type) |
Permite que el solucionador devuelva tipos distintos de Stream. |
| ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |