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 é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, XmlCachingResolver
pour 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) |