XmlUrlResolver Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Řeší externí prostředky XML pojmenované identifikátorem 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
- Dědičnost
Příklady
Následující příklad vytvoří XmlReader, který používá XmlUrlResolver s výchozími přihlašovacími údaji.
// 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)
Poznámky
XmlUrlResolver slouží k překladu externích prostředků XML, jako jsou entity, definice typů dokumentů (DTD) nebo schémata. Používá se také ke zpracování zahrnutí a importu prvků nalezených v šablonách stylů XSL (Extensible StyleSheet Language) nebo schématech XSD (XML Schema Definition Language).
XmlUrlResolver je výchozím překladačem pro všechny třídy v oboru názvů System.Xml. Podporuje protokoly a požadavky file://
a http://
z třídy WebRequest.
Důležitý
XmlUrlResolver objekty můžou obsahovat citlivé informace, jako jsou přihlašovací údaje uživatele. Při ukládání XmlUrlResolver objektů do mezipaměti byste měli být opatrní a neměli byste předávat XmlUrlResolver objektů do nedůvěryhodné komponenty.
Řešení DTD
Pokud čtečka XML (XmlReader) čte soubor XML, který obsahuje externí DTD, volá metodu XmlUrlResolver.GetEntityAsync k získání reprezentace datového proudu DTD. Pokud je identifikátor URI DTD relativní identifikátor URI, čtečka XML volá metodu XmlUrlResolver.ResolveUri a vrátí absolutní identifikátor URI pro dané relativeUri
a baseURi
parametry. Pokud XmlUrlResolver neví, jak přeložit identifikátor URI, vrátí null
.
Metoda XmlUrlResolver.GetEntity používá informace ve vlastnosti Credentials podle potřeby k získání přístupu k prostředku. Z bezpečnostních důvodů neexistuje žádný get
přístup k této vlastnosti. Při přepsání XmlResolver, GetEntity je metoda, která využívá informace o přihlašovacích údajích ve vlastnosti Credentials.
Překlad všech ostatních prostředků XML je velmi podobný překladu DTD. XmlResolver vyjedná spojení s externím prostředkem a vrátí Stream reprezentaci obsahu. Objekt, který volá XmlResolver interpretuje datový proud.
Rozšíření Třídy XmlUrlResolver
Výchozí chování třídy XmlUrlResolver spočívá v překladu datového prostředku XML ze zdroje, nikoli z mezipaměti. V některých případech může řešení datového prostředku z mezipaměti zlepšit výkon aplikace uložením cesty na server datového prostředku. Zde je třeba zvážit zvýšení výkonu s potřebou up-to-date obsahu.
Následující příklad rozšiřuje XmlUrlResolver a sestaví novou třídu, XmlCachingResolver
, pro načtení prostředků z mezipaměti. To se provádí přepsáním vlastnosti XmlUrlResolver.Credentials a 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
Chování XmlCachingResolver
třídy ukládání do mezipaměti se implementuje v metodě GetEntity
. To se provádí vytvořením nových WebRequest a HttpRequestCachePolicy objektů. Objekt HttpRequestCachePolicy je vytvořen pomocí Default člena výčtu HttpRequestCacheLevel.
Vlastnost CachePolicy objektu WebRequest je nastavena s objektem HttpRequestCachePolicy.
Instance třídy XmlCachingResolver
je vytvořena s Boolean
enableHttpCaching
. Pokud je tato hodnota nastavena na true
, instance přeloží prostředek z výchozí mezipaměti, pokud je to možné. Pokud je enableHttpCaching
nastavena na false
, instance použije výchozí chování a vyřeší prostředky ze svého zdroje.
Poznámka
Tento příklad využívá rozšiřitelnost tříd XML v rozhraní .NET Framework. Další třídy lze rozšířit a přizpůsobit tak, aby vyhovovaly potřebám konkrétní aplikace.
Konstruktory
XmlUrlResolver() |
Inicializuje novou instanci XmlUrlResolver třídy. |
Vlastnosti
CachePolicy |
Získá nebo nastaví zásady mezipaměti pro základní WebRequest objektu. |
Credentials |
Nastaví přihlašovací údaje používané k ověřování webových požadavků. |
Proxy |
Získá nebo nastaví síťový proxy pro základní WebRequest objektu. |
Metody
Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
GetEntity(Uri, String, Type) |
Mapuje identifikátor URI na objekt, který obsahuje skutečný prostředek. |
GetEntityAsync(Uri, String, Type) |
Asynchronně mapuje identifikátor URI na objekt, který obsahuje skutečný prostředek. |
GetEntityAsync(Uri, String, Type) |
Asynchronně mapuje identifikátor URI na objekt, který obsahuje skutečný prostředek. (Zděděno od XmlResolver) |
GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
ResolveUri(Uri, String) |
Vyřeší absolutní identifikátor URI ze základního a relativního identifikátoru URI. |
ResolveUri(Uri, String) |
Při přepsání v odvozené třídě přeloží absolutní identifikátor URI ze základního a relativního identifikátoru URI. (Zděděno od XmlResolver) |
SupportsType(Uri, Type) |
Umožňuje překladače vrátit jiné typy než Stream. (Zděděno od XmlResolver) |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |