XmlUrlResolver Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
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 Boolean
enableHttpCaching
. 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
- documents XML et de données