XmlUrlResolver Klas

Definitie

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
XmlUrlResolver

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)

Van toepassing op

Zie ook