Partager via


Cet article fournit des remarques supplémentaires à la documentation de référence de cette API.

Le XmlResolver type est utilisé pour résoudre des ressources XML externes, telles que des entités, des définitions de type de document (DTD) ou des schémas. Il est également utilisé pour traiter les éléments inclus et importés dans les feuilles de style XSL (Extensible Stylesheet Language) ou les schémas XSD (XML Schema Definition Language).

XmlResolver gère tous les aspects de la négociation de la connexion aux ressources, notamment la gestion des informations d’identification de sécurité, l’ouverture de la connexion à la source de données et le renvoi de la ressource sous la forme d’un flux ou d’un autre type d’objet. L’objet qui appelle XmlResolver a la tâche d’interpréter le flux.

L’espace System.Xml de noms comprend deux implémentations concrètes de la XmlResolver classe :

  • XmlUrlResolver est le programme de résolution par défaut pour toutes les classes dans l'espace de noms System.Xml. Il prend en charge les protocoles file:// et les requêtes http:// de la classe System.Net.WebRequest. Pour obtenir des exemples d’extension de la classe pour améliorer les performances, consultez la XmlUrlResolver page de référence.

  • XmlSecureResolver permet de sécuriser un autre XmlResolver objet en encapsulant l’objet et en limitant les ressources auxquelles il peut accéder. Par exemple, il XmlSecureResolver peut interdire l’accès à des sites ou zones Internet spécifiques.

Vous pouvez créer et spécifier votre propre programme de résolution. Si vous ne spécifiez pas de programme de résolution, le lecteur utilise une valeur par défaut XmlUrlResolver sans informations d’identification utilisateur.

Vous spécifiez la XmlResolver valeur à utiliser en définissant la XmlReaderSettings.XmlResolver propriété et en transmettant l’objet XmlReaderSettings à la Create méthode.

Si la ressource est stockée sur un système qui nécessite une authentification, vous utilisez la XmlResolver.Credentials propriété pour spécifier les informations d’identification nécessaires.

Fournir des informations d'authentification

Le fichier qui contient les données XML à lire peut avoir une stratégie d’accès restreint. Si l’authentification est requise pour accéder à une ressource réseau, utilisez la Credentials propriété pour spécifier les informations d’identification nécessaires. Si la Credentials propriété n’est pas définie, les informations d’identification sont définies sur null.

Par exemple, supposons que les informations d’identification sont nécessaires lors de la demande de données à partir du web à des fins d’authentification. Sauf si le répertoire virtuel web autorise l’accès anonyme, vous devez définir la Credentials propriété pour fournir des informations d’identification. L’exemple suivant crée un XmlReader objet qui utilise des XmlUrlResolver informations d’identification par défaut pour accéder au http://localhost/bookstore/inventory.xml site.

// 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)

Vous pouvez fournir différentes informations d’identification pour différentes URI et les ajouter à un cache. Ces informations d’identification sont utilisées pour vérifier l’authentification des différentes URI, quelle que soit la source d’origine du code XML. L’exemple suivant montre comment ajouter des informations d’identification à un cache.

// 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)

Considérations relatives à la sécurité

Tenez compte des éléments suivants lors de l’utilisation de la XmlResolver classe.

  • XmlResolver les objets peuvent contenir des informations sensibles telles que des informations d’identification utilisateur. Vous devez être prudent lors de la mise en cache d’objets XmlResolver et ne doit pas passer l’objet XmlResolver à un composant non approuvé.

  • Si vous concevez une propriété de classe qui utilise la XmlResolver classe, la propriété doit être définie en tant que propriété en écriture seule. La propriété peut être utilisée pour spécifier la XmlResolver valeur à utiliser, mais elle ne peut pas être utilisée pour retourner un XmlResolver objet.

  • Si votre application accepte XmlResolver des objets provenant d’un code non approuvé, vous ne pouvez pas supposer que l’URI passé dans la GetEntity méthode sera identique à celui retourné par la ResolveUri méthode. Les classes dérivées de la XmlResolver classe peuvent remplacer la GetEntity méthode et retourner des données différentes de celles contenues dans l’URI d’origine.

  • Votre application peut atténuer les menaces de déni de service de mémoire à la GetEntity méthode en implémentant un IStream paramètre qui limite le nombre d’octets lus. Cela permet de se protéger contre les situations où le code malveillant tente de transmettre un flux infini d’octets à la GetEntity méthode.