XmlUrlResolver Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
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 null
zurü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 XmlCachingResolver
erstellt, 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 Boolean
enableHttpCaching
erstellt. Wenn dieser Wert auf true
festgelegt ist, löst die Instanz eine Ressource nach Möglichkeit aus dem Standardcache auf. Wenn enableHttpCaching
auf false
festgelegt 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) |