XmlUrlResolver Klasse

Definition

Löst externe XML-Ressourcen auf, die durch einen Uniform Resource Identifier (URI) benannt werden.

public ref class XmlUrlResolver : System::Xml::XmlResolver
public class XmlUrlResolver : System.Xml.XmlResolver
type XmlUrlResolver = class
    inherit XmlResolver
Public Class XmlUrlResolver
Inherits XmlResolver
Vererbung
XmlUrlResolver

Beispiele

Im folgenden Beispiel wird eine XmlReader erstellt, die eine XmlUrlResolver mit Standardanmeldeinformationen verwendet.


// 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)

Hinweise

XmlUrlResolver wird verwendet, um externe XML-Ressourcen wie Entitäten, Dokumenttypdefinitionen (DTDs) oder Schemas aufzulösen. Es wird auch verwendet, um Elemente einzuschließen und zu importieren, die in XSL-Stylesheets (Extensible StyleSheet Language) oder XSD-Schemaschemas (XML Schema Definition Language) enthalten sind.

XmlUrlResolver ist der Standardlöser für alle Klassen im System.Xml-Namespace. Sie unterstützt die Protokolle file:// und http:// von der WebRequest Klasse.

Wichtig

XmlUrlResolver Objekte können vertrauliche Informationen wie Benutzeranmeldeinformationen enthalten. Achten Sie darauf, XmlUrlResolver Objekte zwischenzuspeichern und nicht XmlUrlResolver Objekte an eine nicht vertrauenswürdige Komponente übergeben.

Auflösen von DTDs

Wenn ein XML-Reader (XmlReader) eine XML-Datei liest, die eine externe DTD enthält, ruft sie die XmlUrlResolver.GetEntityAsync-Methode auf, um eine Streamdarstellung der DTD abzurufen. Wenn der URI der DTD ein relativer URI ist, ruft der XML-Reader die XmlUrlResolver.ResolveUri-Methode auf und gibt einen absoluten URI für die angegebenen relativeUri und baseURi Parameter zurück. Wenn der XmlUrlResolver nicht weiß, wie der URI aufgelöst wird, wird nullzurückgegeben.

Die XmlUrlResolver.GetEntity-Methode verwendet die Informationen in der Credentials Eigenschaft entsprechend, um Zugriff auf die Ressource zu erhalten. Aus Sicherheitsgründen gibt es keinen get Accessor für diese Eigenschaft. Beim Überschreiben von XmlResolverist GetEntity- die Methode, die die Anmeldeinformationen in der eigenschaft Credentials verwendet.

Das Auflösen aller anderen XML-Ressourcen ähnelt dem Auflösen von DTDs. XmlResolver die Verbindung mit der externen Ressource aus und gibt eine Stream Darstellung des Inhalts zurück. Das Objekt, das den Aufruf an XmlResolver den Datenstrom interpretiert.

Erweitern der XmlUrlResolver-Klasse

Das Standardverhalten der XmlUrlResolver Klasse besteht darin, eine XML-Datenressource aus der Quelle aufzulösen, nicht aus dem Cache. In einigen Fällen kann das Auflösen einer Datenressource aus dem Cache die Leistung einer Anwendung verbessern, indem eine Reise zum Server der Datenressource gespeichert wird. Die Leistungsgewinne hier müssen gegen den Bedarf an up-to-Datumsinhalten abgewogen werden.

Im folgenden Beispiel wird XmlUrlResolver erweitert und eine neue Klasse XmlCachingResolvererstellt, um Ressourcen aus dem Cache abzurufen. Dazu überschreiben Sie die XmlUrlResolver.Credentials-Eigenschaft und die XmlUrlResolver.GetEntity-Methode.

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

Das Zwischenspeicherungsverhalten der XmlCachingResolver Klasse wird in der GetEntity-Methode implementiert. Dazu werden neue WebRequest- und HttpRequestCachePolicy-Objekte erstellt. Das HttpRequestCachePolicy-Objekt wird mithilfe des Default Elements der HttpRequestCacheLevel-Aufzählung erstellt.

Die CachePolicy-Eigenschaft des WebRequest-Objekts wird mit dem HttpRequestCachePolicy-Objekt festgelegt.

Eine Instanz der XmlCachingResolver Klasse wird mit dem BooleanenableHttpCachingerstellt. Wenn dieser Wert auf truefestgelegt ist, löst die Instanz eine Ressource nach Möglichkeit aus dem Standardcache auf. Wenn enableHttpCaching auf falsefestgelegt ist, verwendet die Instanz das Standardverhalten und löst Ressourcen aus ihrer Quelle auf.

Anmerkung

In diesem Beispiel wird die Erweiterbarkeit der XML-Klassen im .NET Framework genutzt. Andere Klassen können entsprechend den Anforderungen einer bestimmten Anwendung erweitert und angepasst werden.

Konstruktoren

XmlUrlResolver()

Initialisiert eine neue Instanz der XmlUrlResolver Klasse.

Eigenschaften

CachePolicy

Dient zum Abrufen oder Festlegen der Cacherichtlinie für das zugrunde liegende WebRequest -Objekt.

Credentials

Legt Anmeldeinformationen fest, die zum Authentifizieren von Webanforderungen verwendet werden.

Proxy

Dient zum Abrufen oder Festlegen des Netzwerkproxys für das zugrunde liegende WebRequest -Objekt.

Methoden

Equals(Object)

Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht.

(Geerbt von Object)
GetEntity(Uri, String, Type)

Ordnet einen URI einem Objekt zu, das die tatsächliche Ressource enthält.

GetEntityAsync(Uri, String, Type)

Ordnet asynchron einen URI einem Objekt zu, das die tatsächliche Ressource enthält.

GetEntityAsync(Uri, String, Type)

Ordnet asynchron einen URI einem Objekt zu, das die tatsächliche Ressource enthält.

(Geerbt von XmlResolver)
GetHashCode()

Dient als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
ResolveUri(Uri, String)

Löst den absoluten URI aus der Basis und relativen URIs auf.

ResolveUri(Uri, String)

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird der absolute URI aus der Basis und relativen URIs aufgelöst.

(Geerbt von XmlResolver)
SupportsType(Uri, Type)

Ermöglicht dem Resolver, andere Typen als Streamzurückzugeben.

(Geerbt von XmlResolver)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für:

Weitere Informationen