Compartilhar via


XmlUrlResolver Classe

Definição

Resolve recursos XML externos nomeados por um 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
Herança
XmlUrlResolver

Exemplos

O exemplo a seguir cria um XmlReader que usa um XmlUrlResolver com credenciais padrão.


// 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)

Comentários

XmlUrlResolver é usado para resolver recursos XML externos, como entidades, DTDs (definições de tipo de documento) ou esquemas. Ele também é usado para processar elementos de inclusão e importação encontrados em folhas de estilo XSL (Extensible StyleSheet Language) ou esquemas XSD (linguagem de definição de esquema XML).

XmlUrlResolver é o resolvedor padrão para todas as classes no namespace System.Xml. Ele dá suporte aos protocolos file:// e http:// e solicitações da classe WebRequest.

Importante

XmlUrlResolver objetos podem conter informações confidenciais, como credenciais de usuário. Você deve ter cuidado ao armazenar em cache XmlUrlResolver objetos e não deve passar XmlUrlResolver objetos para um componente não confiável.

Resolvendo DTDs

Se um leitor XML (XmlReader) estiver lendo um arquivo XML que contém um DTD externo, ele chamará o método XmlUrlResolver.GetEntityAsync para obter uma representação de fluxo do DTD. Se o URI do DTD for um URI relativo, o leitor XML chamará o método XmlUrlResolver.ResolveUri e retornará um URI absoluto para os parâmetros relativeUri e baseURi fornecidos. Se o XmlUrlResolver não souber como resolver o URI, ele retornará null.

O método XmlUrlResolver.GetEntity usa as informações na propriedade Credentials conforme apropriado para obter acesso ao recurso. Não há nenhum acessador get para essa propriedade por motivos de segurança. Ao substituir , GetEntity é o método que utiliza as informações de credencial na propriedade credenciais do .

Resolver todos os outros recursos XML é muito semelhante à resolução de DTDs. XmlResolver negocia a conexão com o recurso externo e retorna uma representação Stream do conteúdo. O objeto que está fazendo a chamada para XmlResolver interpreta o fluxo.

Estendendo a classe XmlUrlResolver

O comportamento padrão da classe XmlUrlResolver é resolver um recurso de dados XML de sua origem, não do cache. Em alguns casos, resolver um recurso de dados do cache pode melhorar o desempenho de um aplicativo salvando uma viagem ao servidor do recurso de dados. Os ganhos de desempenho aqui devem ser ponderados em relação à necessidade de conteúdo de data up-to.

O exemplo a seguir estende XmlUrlResolver e cria uma nova classe, XmlCachingResolver, para recuperar recursos do cache. Isso é feito substituindo a propriedade XmlUrlResolver.Credentials e o método 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

O comportamento de cache da classe XmlCachingResolver é implementado no método GetEntity. Isso é feito criando novos objetos WebRequest e HttpRequestCachePolicy. O objeto HttpRequestCachePolicy é criado usando o membro Default da enumeração HttpRequestCacheLevel.

A propriedade CachePolicy do objeto WebRequest é definida com o objeto HttpRequestCachePolicy.

Uma instância da classe XmlCachingResolver é criada com o BooleanenableHttpCaching. Quando esse valor é definido como true, a instância resolve um recurso do cache padrão, se possível. Quando enableHttpCaching é definido como false, a instância usa o comportamento padrão e resolve recursos de sua origem.

Nota

Este exemplo aproveita a extensibilidade das classes XML no .NET Framework. Outras classes podem ser estendidas e personalizadas para atender às necessidades de um aplicativo específico.

Construtores

XmlUrlResolver()

Inicializa uma nova instância da classe XmlUrlResolver.

Propriedades

CachePolicy

Obtém ou define a política de cache para o objeto WebRequest subjacente.

Credentials

Define as credenciais usadas para autenticar solicitações da Web.

Proxy

Obtém ou define o proxy de rede para o objeto WebRequest subjacente.

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetEntity(Uri, String, Type)

Mapeia um URI para um objeto que contém o recurso real.

GetEntityAsync(Uri, String, Type)

Mapeia de forma assíncrona um URI para um objeto que contém o recurso real.

GetEntityAsync(Uri, String, Type)

Mapeia de forma assíncrona um URI para um objeto que contém o recurso real.

(Herdado de XmlResolver)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
ResolveUri(Uri, String)

Resolve o URI absoluto das URIs base e relativas.

ResolveUri(Uri, String)

Quando substituído em uma classe derivada, resolve o URI absoluto das URIs base e relativas.

(Herdado de XmlResolver)
SupportsType(Uri, Type)

Permite que o resolvedor retorne tipos diferentes de Stream.

(Herdado de XmlResolver)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Confira também