XmlUrlResolver Klasse

Definition

Löst externe XML-Ressourcen auf, die durch einen URI (Uniform Resource Identifier) 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 Objekt erstellt, das eine XmlReader 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 Extensible StyleSheet Language (XSL)-Stylesheets oder XML-Schemadefinitionsschemas (XSD)-Schemas gefunden wurden.

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

Wichtig

XmlUrlResolver-Objekte können vertrauliche Informationen (z. B. Anmeldeinformationen des Benutzers) enthalten. Sie sollten vorsichtig sein, wenn Sie Objekte zwischenspeichern XmlUrlResolver und keine Objekte an eine nicht vertrauenswürdige Komponente übergeben XmlUrlResolver sollten.

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 Datenstromdarstellung 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 aufgelöst werden kann, wird er zurückgegeben null.

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

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

Erweitern der XmlUrlResolver-Klasse

Standardmäßig verhält sich die XmlUrlResolver-Klasse eigentlich so, dass sie XML-Datenressourcen aus ihrer Quelle und nicht aus dem Cache auflöst. In einigen Fällen kann die Auflösung einer Datenressource aus dem Cache zur Beschleunigung der Arbeitsgeschwindigkeit beitragen, da damit der Weg zum Server der Datenressource erspart bleibt. Die auf diese Weise erzielbaren Leistungsgewinne müssen gegen die Erfordernis abgewogen werden, ständig für aktuellen Inhalt zu sorgen.

Im folgenden Beispiel wird eine neue Klasse erweitert XmlUrlResolver und erstellt, XmlCachingResolverum Ressourcen aus dem Cache abzurufen. Dazu werden die XmlUrlResolver.Credentials-Eigenschaft und die XmlUrlResolver.GetEntity-Methode außer Kraft gesetzt.

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 Zwischenspeicherverhalten der XmlCachingResolver-Klasse wird in der GetEntity-Methode implementiert. Zu diesem Zweck werden die neuen Objekte WebRequest und HttpRequestCachePolicy erstellt. Das HttpRequestCachePolicy-Objekt wird erstellt, wobei der Default-Member der HttpRequestCacheLevel-Enumeration verwendet wird.

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

Eine Instanz der XmlCachingResolver Klasse wird mit der Boolean enableHttpCaching. Wenn dieser Wert auf true"Festgelegt" festgelegt ist, löst die Instanz ggf. eine Ressource aus dem Standardcache aus. Wenn enableHttpCaching die Instanz auf false"Festgelegt" festgelegt ist, verwendet die Instanz das Standardverhalten und löst Ressourcen aus ihrer Quelle.

Hinweis

In diesem Beispiel wird die Erweiterbarkeit der XML-Klassen im .NET Framework genutzt. Es können auch andere Klassen erweitert und angepasst werden, um den Anforderungen einer bestimmten Anwendung zu entsprechen.

Konstruktoren

XmlUrlResolver()

Initialisiert eine neue Instanz der XmlUrlResolver-Klasse.

Eigenschaften

CachePolicy

Ruft die Cacherichtlinie für das zugrunde liegende WebRequest-Objekt ab oder legt diese fest.

Credentials

Legt Anmeldeinformationen zum Authentifizieren von Webanforderungen fest.

Proxy

Ruft den Netzwerkproxy für das zugrunde liegende WebRequest-Objekt ab oder legt diesen fest.

Methoden

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

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

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

GetEntityAsync(Uri, String, Type)

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

GetEntityAsync(Uri, String, Type)

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

(Geerbt von XmlResolver)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ResolveUri(Uri, String)

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

ResolveUri(Uri, String)

Löst beim Überschreiben in einer abgeleiteten Klasse den absoluten URI der Basis sowie relative URIs auf.

(Geerbt von XmlResolver)
SupportsType(Uri, Type)

Erlaubt dem Resolver, andere Typen als Stream zurückzugeben.

(Geerbt von XmlResolver)
ToString()

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

(Geerbt von Object)

Gilt für

Siehe auch