XmlUrlResolver Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee worden externe XML-resources met de naam omgezet door een 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
- Overname
Voorbeelden
In het volgende voorbeeld wordt een XmlReaderXmlUrlResolver met standaardreferenties gemaakt.
// 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)
Opmerkingen
XmlUrlResolver wordt gebruikt voor het oplossen van externe XML-resources, zoals entiteiten, documenttypedefinities (DTD's) of schema's. Het wordt ook gebruikt voor het verwerken en importeren van elementen in XSL-opmaakmodellen (Extensible StyleSheet Language) of XSD-schema's (XML Schema Definition Language).
XmlUrlResolver is de standaardresolver voor alle klassen in de System.Xml naamruimte. Het ondersteunt de file:// en http:// protocollen en aanvragen van de WebRequest klasse.
Important
XmlUrlResolver objecten kunnen gevoelige informatie bevatten, zoals gebruikersreferenties. U moet voorzichtig zijn wanneer u objecten in de cache opscachet XmlUrlResolver en geen objecten doorgeeft XmlUrlResolver aan een niet-vertrouwd onderdeel.
DTD's oplossen
Als een XML-lezer (XmlReader) een XML-bestand leest dat een externe DTD bevat, wordt de XmlUrlResolver.GetEntityAsync methode aangeroepen om een stroomweergave van de DTD op te halen. Als de URI van de DTD een relatieve URI is, roept de XML-lezer de XmlUrlResolver.ResolveUri methode aan en retourneert een absolute URI voor de opgegeven relativeUri en baseURi parameters. Als de XmlUrlResolver URI niet weet hoe de URI moet worden omgezet, wordt deze geretourneerd null.
De XmlUrlResolver.GetEntity methode gebruikt de informatie in de Credentials eigenschap zo nodig om toegang te krijgen tot de resource. Er is om veiligheidsredenen geen get toegangsrechten voor deze eigenschap. Bij het overschrijven XmlResolveris GetEntity de methode die gebruikmaakt van de referentiegegevens in de eigenschap Referenties .
Het oplossen van alle andere XML-resources is vergelijkbaar met het omzetten van DTD's. XmlResolver onderhandelt over de verbinding met de externe resource en retourneert een Stream weergave van de inhoud. Het object dat de aanroep doet om de stream te XmlResolver interpreteren.
De klasse XmlUrlResolver uitbreiden
Het standaardgedrag van de klasse is het oplossen van een XML-gegevensresource uit de bron, niet uit de XmlUrlResolver cache. In sommige gevallen kan het oplossen van een gegevensresource uit de cache de prestaties van een toepassing verbeteren door een reis naar de server van de gegevensresource op te slaan. De prestatieverbeteringen hier moeten worden afgewogen tegen de noodzaak van up-to-datuminhoud.
In het volgende voorbeeld wordt een nieuwe klasse XmlCachingResolveruitgebreid XmlUrlResolver en gebouwd om resources op te halen uit de cache. Dit wordt gedaan door de XmlUrlResolver.Credentials eigenschap en de XmlUrlResolver.GetEntity methode te overschrijven.
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
Het cachinggedrag van de XmlCachingResolver klasse wordt geïmplementeerd in de GetEntity methode. Dit wordt gedaan door nieuwe WebRequest objecten te HttpRequestCachePolicy maken. Het HttpRequestCachePolicy object wordt gemaakt met behulp van het Default lid van de HttpRequestCacheLevel opsomming.
De CachePolicy eigenschap van het WebRequest object wordt ingesteld met het HttpRequestCachePolicy object.
Er wordt een exemplaar van de XmlCachingResolver klasse gemaakt met de BooleanenableHttpCaching. Wanneer deze waarde is ingesteld op true, wordt door het exemplaar een resource van de standaardcache omgezet, indien mogelijk. Wanneer enableHttpCaching dit is ingesteld false, gebruikt het exemplaar het standaardgedrag en worden resources uit de bron omgezet.
Note
In dit voorbeeld wordt gebruikgemaakt van de uitbreidbaarheid van de XML-klassen in het .NET Framework. Andere klassen kunnen worden uitgebreid en aangepast aan de behoeften van een bepaalde toepassing.
Constructors
| Name | Description |
|---|---|
| XmlUrlResolver() |
Initialiseert een nieuw exemplaar van de XmlUrlResolver klasse. |
Eigenschappen
| Name | Description |
|---|---|
| CachePolicy |
Hiermee wordt het cachebeleid voor het onderliggende WebRequest object opgehaald of ingesteld. |
| Credentials |
Hiermee stelt u referenties in die worden gebruikt voor het verifiëren van webaanvragen. |
| Proxy |
Hiermee haalt u de netwerkproxy voor het onderliggende WebRequest object op of stelt u deze in. |
Methoden
| Name | Description |
|---|---|
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| GetEntity(Uri, String, Type) |
Wijst een URI toe aan een object dat de werkelijke resource bevat. |
| GetEntityAsync(Uri, String, Type) |
Asynchroon wijst een URI toe aan een object dat de werkelijke resource bevat. |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| ResolveUri(Uri, String) |
Hiermee wordt de absolute URI van de basis- en relatieve URI's omgezet. |
| ResolveUri(Uri, String) |
Als deze wordt overschreven in een afgeleide klasse, wordt de absolute URI van de basis- en relatieve URI's omgezet. (Overgenomen van XmlResolver) |
| SupportsType(Uri, Type) |
Hiermee kan de resolver andere typen retourneren dan Stream. (Overgenomen van XmlResolver) |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |