XmlUrlResolver Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Rozpoznaje zewnętrzne zasoby XML nazwane przez identyfikator URI (Uniform Resource Identifier).
public ref class XmlUrlResolver : System::Xml::XmlResolver
public class XmlUrlResolver : System.Xml.XmlResolver
type XmlUrlResolver = class
inherit XmlResolver
Public Class XmlUrlResolver
Inherits XmlResolver
- Dziedziczenie
Przykłady
Poniższy przykład tworzy XmlReader, który używa XmlUrlResolver z poświadczeniami domyślnymi.
// 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)
Uwagi
XmlUrlResolver służy do rozpoznawania zewnętrznych zasobów XML, takich jak jednostki, definicje typów dokumentów (DTD) lub schematy. Służy również do przetwarzania elementów dołączania i importowania elementów znajdujących się w arkuszach stylów extensible StyleSheet Language (XSL) lub schematach języka definicji schematu XML (XSD).
XmlUrlResolver jest domyślnym narzędziem rozpoznawania dla wszystkich klas w przestrzeni nazw System.Xml. Obsługuje on protokoły file://
i http://
oraz żądania z klasy WebRequest.
Ważny
XmlUrlResolver obiekty mogą zawierać poufne informacje, takie jak poświadczenia użytkownika. Należy zachować ostrożność podczas buforowania obiektów XmlUrlResolver i nie należy przekazywać XmlUrlResolver obiektów do niezaufanego składnika.
Rozpoznawanie identyfikatorów DTD
Jeśli czytnik XML (XmlReader) odczytuje plik XML zawierający zewnętrzny identyfikator DTD, wywołuje metodę XmlUrlResolver.GetEntityAsync w celu uzyskania reprezentacji strumienia dtD. Jeśli identyfikator URI dtD jest względnym identyfikatorem URI, czytnik XML wywołuje metodę XmlUrlResolver.ResolveUri i zwraca bezwzględny identyfikator URI dla danego parametru relativeUri
i baseURi
. Jeśli XmlUrlResolver nie wie, jak rozpoznać identyfikator URI, zwraca null
.
Metoda XmlUrlResolver.GetEntity używa informacji we właściwości Credentials odpowiednio do uzyskania dostępu do zasobu. Nie ma get
dostępu do tej właściwości ze względów bezpieczeństwa. Podczas zastępowania XmlResolverGetEntity jest metoda, która korzysta z informacji o poświadczeniach we właściwości Credentials.
Rozpoznawanie wszystkich innych zasobów XML jest bardzo podobne do rozpoznawania dtD. XmlResolver negocjuje połączenie z zasobem zewnętrznym i zwraca Stream reprezentację zawartości. Obiekt, który wykonuje wywołanie w celu XmlResolver interpretuje strumień.
Rozszerzanie klasy XmlUrlResolver
Domyślnym zachowaniem klasy XmlUrlResolver jest rozwiązanie zasobu danych XML ze źródła, a nie z pamięci podręcznej. W niektórych przypadkach rozpoznawanie zasobu danych z pamięci podręcznej może zwiększyć wydajność aplikacji, zapisując podróż na serwer zasobu danych. Tutaj należy rozważyć wzrost wydajności w stosunku do potrzeby up-to-date zawartości.
Poniższy przykład rozszerza XmlUrlResolver i tworzy nową klasę, XmlCachingResolver
, aby pobrać zasoby z pamięci podręcznej. Jest to wykonywane przez zastąpienie właściwości XmlUrlResolver.Credentials i metody XmlUrlResolver.GetEntity.
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
Zachowanie buforowania klasy XmlCachingResolver
jest implementowane w metodzie GetEntity
. Odbywa się to przez utworzenie nowych obiektów WebRequest i HttpRequestCachePolicy. Obiekt HttpRequestCachePolicy jest tworzony przy użyciu elementu członkowskiego Default wyliczenia HttpRequestCacheLevel.
Właściwość CachePolicy obiektu WebRequest jest ustawiana z obiektem HttpRequestCachePolicy.
Wystąpienie klasy XmlCachingResolver
jest tworzone przy użyciu Boolean
enableHttpCaching
. Gdy ta wartość zostanie ustawiona na true
, wystąpienie rozpozna zasób z domyślnej pamięci podręcznej, jeśli to możliwe. Gdy enableHttpCaching
jest ustawiona na false
, wystąpienie używa domyślnego zachowania i rozpoznaje zasoby ze źródła.
Nuta
Ten przykład wykorzystuje rozszerzalność klas XML w programie .NET Framework. Inne klasy można rozszerzyć i dostosować do potrzeb określonej aplikacji.
Konstruktory
XmlUrlResolver() |
Inicjuje nowe wystąpienie klasy XmlUrlResolver. |
Właściwości
CachePolicy |
Pobiera lub ustawia zasady pamięci podręcznej dla bazowego obiektu WebRequest. |
Credentials |
Ustawia poświadczenia używane do uwierzytelniania żądań internetowych. |
Proxy |
Pobiera lub ustawia serwer proxy sieci dla bazowego obiektu WebRequest. |
Metody
Equals(Object) |
Określa, czy określony obiekt jest równy bieżącemu obiektowi. (Odziedziczone po Object) |
GetEntity(Uri, String, Type) |
Mapuje identyfikator URI na obiekt zawierający rzeczywisty zasób. |
GetEntityAsync(Uri, String, Type) |
Asynchronicznie mapuje identyfikator URI na obiekt zawierający rzeczywisty zasób. |
GetEntityAsync(Uri, String, Type) |
Asynchronicznie mapuje identyfikator URI na obiekt zawierający rzeczywisty zasób. (Odziedziczone po XmlResolver) |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Pobiera Type bieżącego wystąpienia. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Object. (Odziedziczone po Object) |
ResolveUri(Uri, String) |
Usuwa bezwzględny identyfikator URI z identyfikatorów URI podstawowych i względnych. |
ResolveUri(Uri, String) |
Po zastąpieniu w klasie pochodnej rozpoznawanie bezwzględnego identyfikatora URI z podstawowych i względnych identyfikatorów URI. (Odziedziczone po XmlResolver) |
SupportsType(Uri, Type) |
Umożliwia programowi rozpoznawania nazw zwracanie typów innych niż Stream. (Odziedziczone po XmlResolver) |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Dotyczy
Zobacz też
- dokumenty XML i danych