Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.
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 dos implementaciones concretas 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.XmlSecureResolver ayuda a proteger otro XmlResolver objeto envolviendo el objeto y restringiendo los recursos a los que puede acceder. Por ejemplo, puede prohibir el XmlSecureResolver acceso a sitios o zonas de Internet específicos.
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 .