Freigeben über


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 ein XmlReader Objekt erstellt, das eine XmlUrlResolver 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 file:// Protokolle und http:// Anforderungen der WebRequest Klasse.

Wichtig

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

Auflösen von DTDs

Wenn ein XML-Reader (XmlReader) eine XML-Datei liest, die eine externe DTD enthält, wird die XmlUrlResolver.GetEntityAsync Methode aufgerufen, 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 URI nicht weiß, wie der URI aufgelöst wird, wird er zurückgegeben null.

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

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

Erweitern der XmlUrlResolver-Klasse

Das Standardverhalten der XmlUrlResolver Klasse besteht darin, eine XML-Datenressource aus der Quelle zu auflö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 eine neue Klasse erweitert XmlUrlResolver und erstellt, XmlCachingResolverum Ressourcen aus dem Cache abzurufen. Dies geschieht durch Überschreiben der XmlUrlResolver.Credentials Eigenschaft und der 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. Dies geschieht durch Erstellen neuer WebRequest und HttpRequestCachePolicy Objekte. Das HttpRequestCachePolicy Objekt wird mithilfe des Default Elements der HttpRequestCacheLevel Enumeration erstellt.

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

Eine Instanz der XmlCachingResolver Klasse wird mit dem BooleanenableHttpCaching. Wenn dieser Wert auf true festgelegt ist, löst die Instanz eine Ressource nach Möglichkeit aus dem Standardcache auf. Wenn enableHttpCaching diese Einstellung festgelegt falseist, 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

Name Beschreibung
XmlUrlResolver()

Initialisiert eine neue Instanz der XmlUrlResolver-Klasse.

Eigenschaften

Name Beschreibung
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

Name Beschreibung
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.

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 Stream.

(Geerbt von XmlResolver)
ToString()

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

(Geerbt von Object)

Gilt für:

Weitere Informationen