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
W poniższym przykładzie zostanie utworzony obiekt XmlReader , który używa elementu XmlUrlResolver z domyślnymi poświadczeniami.
// 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 znalezionych w arkuszach stylów extensible StyleSheet Language (XSL) lub schematach języka definicji schematu XML (XSD).
XmlUrlResolver to domyślny program rozpoznawania dla wszystkich klas w System.Xml przestrzeni nazw. Obsługuje file://
protokoły i http://
żądania z WebRequest klasy .
Ważne
XmlUrlResolver obiekty mogą zawierać poufne informacje, takie jak poświadczenia użytkownika. Podczas buforowania XmlUrlResolver obiektów należy zachować ostrożność 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 XmlUrlResolver.GetEntityAsync metodę 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 relativeUri
parametru i .baseURi
Jeśli element XmlUrlResolver nie wie, jak rozpoznać identyfikator URI, zwraca wartość null
.
Metoda XmlUrlResolver.GetEntity używa informacji w właściwości odpowiednio Credentials 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 XmlResolvermetoda GetEntity jest metodą wykorzystującą informacje 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 reprezentację Stream zawartości. Obiekt, który wykonuje wywołanie w celu interpretowania XmlResolver strumienia.
Rozszerzanie klasy XmlUrlResolver
Domyślnym zachowaniem XmlUrlResolver klasy 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. W tym miejscu należy rozważyć wzrost wydajności w stosunku do potrzeby aktualnej zawartości.
Poniższy przykład rozszerza XmlUrlResolver i tworzy nową klasę , XmlCachingResolver
aby pobrać zasoby z pamięci podręcznej. Odbywa się to przez zastąpienie XmlUrlResolver.Credentials właściwości i XmlUrlResolver.GetEntity metody .
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 XmlCachingResolver
buforowania klasy jest implementowane w metodzie GetEntity
. Odbywa się to przez utworzenie nowych WebRequest obiektów i HttpRequestCachePolicy . Obiekt HttpRequestCachePolicy jest tworzony przy użyciu Default elementu członkowskiego wyliczenia HttpRequestCacheLevel .
Właściwość CachePolicy WebRequest obiektu jest ustawiana z obiektem HttpRequestCachePolicy .
Wystąpienie XmlCachingResolver
klasy jest tworzone za pomocą klasy Boolean
enableHttpCaching
. Jeśli ta wartość jest ustawiona na true
, wystąpienie rozpozna zasób z domyślnej pamięci podręcznej, jeśli to możliwe. Gdy enableHttpCaching
jest ustawiona wartość false
, wystąpienie używa domyślnego zachowania i rozpoznaje zasoby ze źródła.
Uwaga
Ten przykład wykorzystuje rozszerzalność klas XML w .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 obiektu bazowego WebRequest . |
Credentials |
Ustawia poświadczenia używane do uwierzytelniania żądań internetowych. |
Proxy |
Pobiera lub ustawia serwer proxy sieci dla obiektu bazowego WebRequest . |
Metody
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetEntity(Uri, String, Type) |
Mapy identyfikator URI do obiektu zawierającego 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() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
ResolveUri(Uri, String) |
Usuwa bezwzględny identyfikator URI z identyfikatorów URI bazowych i względnych. |
ResolveUri(Uri, String) |
Po zastąpieniu w klasie pochodnej jest rozpoznawany bezwzględny identyfikator URI z identyfikatorów URI bazowych i względnych. (Odziedziczone po XmlResolver) |
SupportsType(Uri, Type) |
Umożliwia rozpoznawanie zwraca typów innych niż Stream. (Odziedziczone po XmlResolver) |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |