XmlUrlResolver Classe

Definizione

Risolve le 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à
XmlUrlResolver

Esempio

Nell'esempio seguente viene creata una XmlReader che usa un XmlUrlResolver con 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 nomi System.Xml. Supporta i protocolli file:// e http:// e le richieste dalla classe WebRequest.

Importante

XmlUrlResolver oggetti possono contenere informazioni riservate, ad esempio credenziali utente. È consigliabile prestare attenzione quando si memorizzano nella cache XmlUrlResolver oggetti e non devono passare XmlUrlResolver oggetti a un componente non attendibile.

Risoluzione di DTD

Se un lettore XML (XmlReader) legge un file XML contenente un DTD esterno, chiama il metodo XmlUrlResolver.GetEntityAsync per ottenere una rappresentazione di flusso del DTD. Se l'URI del DTD è un URI relativo, il lettore XML chiama il metodo XmlUrlResolver.ResolveUri e restituisce un URI assoluto per i parametri relativeUri e baseURi specificati. Se il XmlUrlResolver non è in grado di risolvere l'URI, restituisce null.

Il metodo XmlUrlResolver.GetEntity usa le informazioni nella proprietà Credentials in base alle esigenze per ottenere l'accesso alla risorsa. Non esiste alcuna funzione di accesso get a questa proprietà per motivi di sicurezza. Quando si sovrascrive XmlResolver, GetEntity è il metodo che utilizza le informazioni sulle credenziali nella proprietà Credentials.

La risoluzione di tutte le altre risorse XML è molto simile alla risoluzione dei DTD. XmlResolver negozia la connessione con la risorsa esterna e restituisce una rappresentazione Stream del contenuto. Oggetto che esegue la chiamata a XmlResolver interpreta il flusso.

Estensione della classe XmlUrlResolver

Il comportamento predefinito della classe XmlUrlResolver consiste nel risolvere una risorsa dati XML dall'origine, non dalla cache. In alcuni casi, la risoluzione di una risorsa dati dalla cache può migliorare le prestazioni di un'applicazione salvando un viaggio nel server della risorsa dati. Il miglioramento delle prestazioni in questo caso deve essere ponderato rispetto alla necessità di up-to-date contenuto.

L'esempio seguente estende XmlUrlResolver e compila una nuova classe, XmlCachingResolver, per recuperare le risorse dalla cache. Questa operazione viene eseguita 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, creare 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 classe XmlCachingResolver con il BooleanenableHttpCaching. 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 in .NET Framework. Altre classi possono essere estese e personalizzate 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 contenente la risorsa effettiva.

GetEntityAsync(Uri, String, Type)

Esegue il mapping asincrono di un URI a un oggetto contenente la risorsa effettiva.

GetEntityAsync(Uri, String, Type)

Esegue il mapping asincrono di un URI a un oggetto contenente la risorsa effettiva.

(Ereditato da XmlResolver)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
ResolveUri(Uri, String)

Risolve l'URI assoluto dagli URI di base e relativi.

ResolveUri(Uri, String)

Quando sottoposto a override in una classe derivata, risolve l'URI assoluto dagli URI di base e relativi.

(Ereditato da XmlResolver)
SupportsType(Uri, Type)

Consente al sistema di risoluzione di restituire tipi diversi da Stream.

(Ereditato da XmlResolver)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a

Vedi anche