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 élément qui utilise des XmlUrlResolver 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 et importer des éléments trouvés dans des feuilles de style XSL (Extensible StyleSheet Language) ou des schémas XSD (XML Schema Definition Language).

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

Important

Les objets XmlUrlResolver peuvent contenir des informations confidentielles telles que des informations d'identification de l'utilisateur. Vous devez être prudent lorsque vous cachez XmlUrlResolver des objets et ne doit pas transmettre d’objets XmlUrlResolver à 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 XmlUrlResolver.GetEntityAsync méthode pour obtenir une représentation de flux du DTD. Si l’URI du DTD est un URI relatif, le lecteur XML appelle la XmlUrlResolver.ResolveUri méthode et retourne un URI absolu pour les paramètres et baseURi les données donnésrelativeUri. Si l’URI 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 de manière appropriée pour pouvoir accéder à la ressource. Il n’existe aucun accesseur get à cette propriété pour des raisons de sécurité. Lors de XmlResolverla remplacement, GetEntity est la méthode qui utilise les informations d’identification dans la propriété Credentials .

La résolution de toutes les autres ressources XML est très similaire à celle des DTD. XmlResolver négocie la connexion avec la ressource externe et retourne une Stream représentation du contenu. Objet qui effectue l’appel pour XmlResolver interpréter 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 pas à 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 économisant un trajet vers le serveur de la ressource de données. Ce gain de performance s'obtient toutefois au détriment de la mise à jour des contenus.

L’exemple suivant étend et génère une nouvelle classe, XmlCachingResolverpour récupérer des XmlUrlResolver ressources à partir du cache. Cette opération s'effectue en substituant 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 cela, les nouveaux objets WebRequest et HttpRequestCachePolicy sont créés. L'objet HttpRequestCachePolicy est crée à 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 XmlCachingResolver classe est créée avec le Boolean enableHttpCaching. Lorsque cette valeur est définie true, l’instance résout une ressource du cache par défaut si possible. Quand enableHttpCaching elle est définie sur false, l’instance utilise le comportement par défaut et résout les ressources de leur source.

Notes

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 vers un objet contenant la ressource réelle.

GetEntityAsync(Uri, String, Type)

Mappe de façon asynchrone un URI vers un objet contenant la ressource réelle.

GetEntityAsync(Uri, String, Type)

Mappe de façon asynchrone un URI vers un objet contenant la ressource réelle.

(Hérité de XmlResolver)
GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(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 à partir de l'URI de base et de l'URI relatif.

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

Permet au programme de résolution de retourner d’autres types 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