XmlUrlResolver Classe

Définition

Résout les ressources XML externes nommées par un URI (Uniform Resource Identifier).

public ref class XmlUrlResolver : System::Xml::XmlResolver
public class XmlUrlResolver : System.Xml.XmlResolver
type XmlUrlResolver = class
    inherit XmlResolver
Public Class XmlUrlResolver
Inherits XmlResolver
Héritage
XmlUrlResolver

Exemples

L’exemple suivant crée un XmlReader qui utilise un XmlUrlResolver avec des informations d’identification par défaut.


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

Remarques

XmlUrlResolver 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).

XmlUrlResolver est le programme de résolution par défaut pour toutes les classes de l’espace de noms System.Xml. Il prend en charge les protocoles file:// et http:// et les requêtes de la classe WebRequest.

Important

XmlUrlResolver objets peuvent contenir des informations sensibles telles que les informations d’identification de l’utilisateur. Vous devez être prudent lorsque vous cachez des objets XmlUrlResolver et ne devez pas passer XmlUrlResolver objets à un composant non approuvé.

Résolution des DTD

Si un lecteur XML (XmlReader) lit un fichier XML qui contient un DTD externe, il appelle la méthode XmlUrlResolver.GetEntityAsync pour obtenir une représentation de flux de la DTD. Si l’URI de la DTD est un URI relatif, le lecteur XML appelle la méthode XmlUrlResolver.ResolveUri et retourne un URI absolu pour les paramètres relativeUri et baseURi donnés. Si le XmlUrlResolver ne sait pas comment résoudre l’URI, il retourne null.

La méthode XmlUrlResolver.GetEntity utilise les informations de la propriété Credentials selon les besoins pour accéder à la ressource. Il n’existe aucun accesseur get à cette propriété pour des raisons de sécurité. Lorsque vous remplacez XmlResolver, GetEntity est la méthode qui utilise les informations d’identification dans la propriété Credentials Credentials.

La résolution de toutes les autres ressources XML est très similaire à la résolution des DTD. XmlResolver négocie la connexion avec la ressource externe et retourne une représentation Stream du contenu. L’objet qui effectue l’appel à XmlResolver interprète le flux.

Extension de la classe XmlUrlResolver

Le comportement par défaut de la classe XmlUrlResolver consiste à résoudre une ressource de données XML à partir de sa source, et non à partir du cache. Dans certains cas, la résolution d’une ressource de données à partir du cache peut améliorer les performances d’une application en enregistrant un voyage sur le serveur de la ressource de données. Les gains de performances ici doivent être pesés par rapport à la nécessité de up-to-date contenu.

L’exemple suivant étend XmlUrlResolver et génère une nouvelle classe, XmlCachingResolver, pour récupérer des ressources à partir du cache. Pour ce faire, substituez la propriété XmlUrlResolver.Credentials et la méthode 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

Le comportement de mise en cache de la classe XmlCachingResolver est implémenté dans la méthode GetEntity. Pour ce faire, créez de nouveaux objets WebRequest et HttpRequestCachePolicy. L’objet HttpRequestCachePolicy est créé à l’aide du membre Default de l’énumération HttpRequestCacheLevel.

La propriété CachePolicy de l’objet WebRequest est définie avec l’objet HttpRequestCachePolicy.

Une instance de la classe XmlCachingResolver est créée avec le BooleanenableHttpCaching. Lorsque cette valeur est définie sur true, l’instance résout une ressource du cache par défaut si possible. Lorsque enableHttpCaching est défini sur false, l’instance utilise le comportement par défaut et résout les ressources de leur source.

Note

Cet exemple tire parti de l’extensibilité des classes XML dans le .NET Framework. D’autres classes peuvent être étendues et personnalisées pour répondre aux besoins d’une application particulière.

Constructeurs

XmlUrlResolver()

Initialise une nouvelle instance de la classe XmlUrlResolver.

Propriétés

CachePolicy

Obtient ou définit la stratégie de cache pour l’objet WebRequest sous-jacent.

Credentials

Définit les informations d’identification utilisées pour authentifier les demandes web.

Proxy

Obtient ou définit le proxy réseau pour l’objet WebRequest sous-jacent.

Méthodes

Equals(Object)

Détermine si l’objet spécifié est égal à l’objet actuel.

(Hérité de Object)
GetEntity(Uri, String, Type)

Mappe un URI à un objet qui contient la ressource réelle.

GetEntityAsync(Uri, String, Type)

Mappe de façon asynchrone un URI à un objet qui contient la ressource réelle.

GetEntityAsync(Uri, String, Type)

Mappe de façon asynchrone un URI à un objet qui contient la ressource réelle.

(Hérité de XmlResolver)
GetHashCode()

Sert de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient la Type de l’instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Objectactuel.

(Hérité de Object)
ResolveUri(Uri, String)

Résout l’URI absolu à partir des URI de base et relatifs.

ResolveUri(Uri, String)

En cas de substitution dans une classe dérivée, résout l’URI absolu de la base et des URI relatifs.

(Hérité de XmlResolver)
SupportsType(Uri, Type)

Permet au programme de résolution de retourner des types autres que Stream.

(Hérité de XmlResolver)
ToString()

Retourne une chaîne qui représente l’objet actuel.

(Hérité de Object)

S’applique à

Voir aussi