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 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 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 dans l'espace de noms System.Xml. Il prend en charge les protocoles file:// et les requêtes http:// de la classe WebRequest.
Important
XmlUrlResolver les objets peuvent contenir des informations sensibles telles que des informations d’identification utilisateur. Vous devez être prudent lorsque vous XmlUrlResolver cachez des objets et ne devez pas passer 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 de la DTD. Si l’URI de la 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 paramètres donnésrelativeUri. Si l’URI XmlUrlResolver ne sait pas comment résoudre l’URI, il retourne null.
La XmlUrlResolver.GetEntity méthode utilise les informations de la Credentials propriété selon les besoins pour accéder à la ressource. Il n’existe aucun get accesseur à 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 .
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 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 XmlUrlResolver classe 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, XmlCachingResolverpour récupérer des ressources à partir du cache. Pour ce faire, substituez la XmlUrlResolver.Credentials propriété et la XmlUrlResolver.GetEntity méthode.
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 XmlCachingResolver classe est implémenté dans la GetEntity méthode. Pour ce faire, créez de nouveaux WebRequest objets.HttpRequestCachePolicy L’objet HttpRequestCachePolicy est créé à l’aide du Default membre de l’énumération HttpRequestCacheLevel .
La CachePolicy propriété de l’objet WebRequest est définie avec l’objet HttpRequestCachePolicy .
Une instance de la XmlCachingResolver classe est créée avec le BooleanenableHttpCaching. 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 falsesur , 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
| Nom | Description |
|---|---|
| XmlUrlResolver() |
Initialise une nouvelle instance de la classe XmlUrlResolver. |
Propriétés
| Nom | Description |
|---|---|
| CachePolicy |
Obtient ou définit la stratégie de cache pour l’objet sous-jacent WebRequest . |
| 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 sous-jacent WebRequest . |
Méthodes
| Nom | Description |
|---|---|
| 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. |
| 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) |