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 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
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, XmlCachingResolver
um 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) |