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