XmlUrlResolver Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Risolve risorse XML esterne denominate da un 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
- Ereditarietà
Esempio
Nell'esempio seguente viene creato un oggetto XmlReader che usa un XmlUrlResolver oggetto con le credenziali predefinite.
// 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)
Commenti
XmlUrlResolver viene usato per risolvere risorse XML esterne, ad esempio entità, definizioni dei tipi di documento (DTD) o schemi. Viene usato anche per elaborare elementi di inclusione e importazione presenti nei fogli di stile XSL (Extensible StyleSheet Language) o negli schemi XSD (XML Schema Definition Language).
XmlUrlResolver è il sistema di risoluzione predefinito per tutte le classi nello spazio dei System.Xml nomi . Supporta i protocolli file://
e http://
e le richieste dalla classe WebRequest.
Importante
Gli oggetti XmlUrlResolver possono contenere informazioni sensibili quali le credenziali utente. È consigliabile prestare attenzione quando si memorizzano nella cache XmlUrlResolver gli oggetti e non devono passare XmlUrlResolver oggetti a un componente non attendibile.
Risoluzione dei DTD
Se un lettore XML (XmlReader) legge un file XML che contiene un DTD esterno, chiama il XmlUrlResolver.GetEntityAsync metodo per ottenere una rappresentazione del flusso di DTD. Se l'URI del DTD è un URI relativo, il lettore XML chiama il XmlUrlResolver.ResolveUri metodo e restituisce un URI assoluto per i parametri e baseURi
specificatirelativeUri
. Se non XmlUrlResolver è in grado di risolvere l'URI, restituisce null
.
Il metodo XmlUrlResolver.GetEntity utilizza le informazioni contenute nella proprietà Credentials in base alle necessità per ottenere l'accesso alla risorsa. Per motivi di sicurezza, non è possibile accedere a questa proprietà tramite la funzione di accesso get
. Quando si XmlResolversovrascrive , GetEntity è il metodo che utilizza le informazioni sulle credenziali nella proprietà Credentials .
Il metodo di risoluzione di tutte le altre risorse XML è molto simile a quello utilizzato per risolvere le DTD. XmlResolver negozia la connessione con la risorsa esterna e restituisce una Stream rappresentazione del contenuto. Oggetto che esegue la chiamata per XmlResolver interpretare il flusso.
Estensione della classe XmlUrlResolver
In base al comportamento predefinito, la classe XmlUrlResolver risolve una risorsa dei dati XML dalla relativa origine, non dalla cache. In alcuni casi la risoluzione di una risorsa dei dati dalla cache può migliorare le prestazioni di un'applicazione in quanto consente di evitare un'operazione di lettura dal server delle risorse dei dati. È tuttavia necessario soppesare in questo caso i vantaggi ottenibili in termini di prestazioni con la necessità di disporre di contenuto sempre aggiornato.
Nell'esempio seguente viene estesa XmlUrlResolver e compilata una nuova classe, XmlCachingResolver
, per recuperare le risorse dalla cache. ovvero eseguendo l'override della proprietà XmlUrlResolver.Credentials e del metodo 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
Il comportamento di memorizzazione nella cache della classe XmlCachingResolver
viene implementato nel metodo GetEntity
. A tale scopo vengono creati nuovi oggetti WebRequest e HttpRequestCachePolicy. L'oggetto HttpRequestCachePolicy viene creato utilizzando il membro Default dell'enumerazione HttpRequestCacheLevel.
La proprietà CachePolicy dell'oggetto WebRequest viene impostata con l'oggetto HttpRequestCachePolicy.
Viene creata un'istanza della XmlCachingResolver
classe con .Boolean
enableHttpCaching
Quando questo valore è impostato su true
, l'istanza risolve una risorsa dalla cache predefinita, se possibile. Quando enableHttpCaching
è impostato su false
, l'istanza usa il comportamento predefinito e risolve le risorse dall'origine.
Nota
Questo esempio sfrutta l'estendibilità delle classi XML nel .NET Framework. È possibile estendere altre classi e personalizzarle in base alle esigenze di una determinata applicazione.
Costruttori
XmlUrlResolver() |
Inizializza una nuova istanza della classe XmlUrlResolver. |
Proprietà
CachePolicy |
Ottiene o imposta i criteri della cache per l'oggetto WebRequest sottostante. |
Credentials |
Imposta le credenziali usate per autenticare le richieste Web. |
Proxy |
Ottiene o imposta il proxy di rete per l'oggetto WebRequest sottostante. |
Metodi
Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
GetEntity(Uri, String, Type) |
Esegue il mapping di un URI a un oggetto che contiene la risorsa effettiva. |
GetEntityAsync(Uri, String, Type) |
Esegue in modo asincrono il mapping di un URI a un oggetto contenente la risorsa effettiva. |
GetEntityAsync(Uri, String, Type) |
Esegue in modo asincrono il mapping di un URI a un oggetto contenente la risorsa effettiva. (Ereditato da XmlResolver) |
GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
ResolveUri(Uri, String) |
Risolve l'URI assoluto dagli URI di base e relativi. |
ResolveUri(Uri, String) |
Quando ne viene eseguito l'override in una classe derivata, risolve l'URI assoluto dagli URI di base e relativi. (Ereditato da XmlResolver) |
SupportsType(Uri, Type) |
Consente al resolver di restituire tipi diversi da Stream. (Ereditato da XmlResolver) |
ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |