XmlUrlResolver Classe

Definição

Resolve recursos XML externos nomeados por um URI (Uniform Resource Identifier).Resolves external XML resources named by a Uniform Resource Identifier (URI).

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.The following example creates an XmlReader that uses an XmlUrlResolver with default credentials.


 // 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.XmlUrlResolver is used to resolve external XML resources such as entities, document type definitions (DTDs) or schemas. Ele também é usado para processar elementos include e Import encontrados em folhas de estilo XSL (Extensible StyleSheet Language) ou em esquemas XSD.It is also used to process include and import elements found in Extensible StyleSheet Language (XSL) style sheets or XML Schema definition language (XSD) schemas.

XmlUrlResolver é o resolvedor padrão para todas as classes no namespace System.Xml.XmlUrlResolver is the default resolver for all classes in the System.Xml namespace. Suporta file:// e os protocolos e as solicitações de http:// de WebRequest classe.It supports the file:// and http:// protocols and requests from the WebRequest class.

Importante

os objetos deXmlUrlResolver podem conter informações sigilosas como credenciais do usuário.XmlUrlResolver objects can contain sensitive information such as user credentials. Você deve ter cuidado ao armazenar em cache XmlUrlResolver objetos e não deve passar XmlUrlResolver objetos para um componente não confiável.You should be careful when you cache XmlUrlResolver objects and should not pass XmlUrlResolver objects to an untrusted component.

Resolvendo DTDsResolving DTDs

Se um leitor de 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.If an XML reader (XmlReader) is reading an XML file that contains an external DTD, it calls the XmlUrlResolver.GetEntityAsync method to get a stream representation of the DTD. Se o URI do DTD for um URI relativo, o leitor de XML chamará o método XmlUrlResolver.ResolveUri e retornará um URI absoluto para os parâmetros de relativeUri e baseURi especificados.If the URI of the DTD is a relative URI, the XML reader calls the XmlUrlResolver.ResolveUri method and returns an absolute URI for the given relativeUri and baseURi parameters. Se o XmlUrlResolver não souber como resolver o URI, ele retornará null.If the XmlUrlResolver doesn't know how to resolve the URI, it returns null.

O método de XmlUrlResolver.GetEntity usa as informações na propriedade de Credentials como apropriada para acessar o recurso.The XmlUrlResolver.GetEntity method uses the information in the Credentials property as appropriate to gain access to the resource. Não há nenhum acessador de get a essa propriedade por razões de segurança.There is no get accessor to this property for security reasons. Ao substituir XmlResolver, GetEntity é o método que utiliza as informações de credenciais na propriedade credenciais .When overwriting XmlResolver, GetEntity is the method that utilizes the credential information in the Credentials property.

Resolver todos outros recursos XML é muito semelhante a resolver os DTDs.Resolving all other XML resources is very similar to resolving DTDs. XmlResolver negocia a conexão com o recurso externo e retorna uma representação Stream do conteúdo.XmlResolver negotiates the connection with the external resource and returns a Stream representation of the content. O objeto que está fazendo a chamada para XmlResolver interpreta o fluxo.The object that is making the call to XmlResolver interprets the stream.

Estendendo a classe XmlUrlResolverExtending the XmlUrlResolver class

O comportamento padrão da classe de XmlUrlResolver é resolver um recurso de dados de sua origem, não do cache.The default behavior of the XmlUrlResolver class is to resolve an XML data resource from its source, not from cache. Em alguns casos, resolver um recurso de dados do cache pode melhorar o desempenho de um aplicativo salvando processamento para o servidor de recurso de dados.In some cases, resolving a data resource from cache can improve the performance of an application by saving a trip to the data resource's server. Os ganhos de desempenho aqui sejam devem ser contra a necessidade para o conteúdo atualizado.The performance gains here must be weighed against the need for up-to-date content.

O exemplo a seguir estende XmlUrlResolver e cria uma nova classe, XmlCachingResolver, para recuperar recursos do cache.The following example extends XmlUrlResolver and builds a new class, XmlCachingResolver, to retrieve resources from the cache. Isso é feito substituindo a propriedade de XmlUrlResolver.Credentials e o método de XmlUrlResolver.GetEntity .This is done by overriding the XmlUrlResolver.Credentials property and the XmlUrlResolver.GetEntity method.

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 cachê da classe de XmlCachingResolver é implementado no método de GetEntity .The caching behavior of the XmlCachingResolver class is implemented in the GetEntity method. Isso é feito criando um novo WebRequest e objetos de HttpRequestCachePolicy .This is done by creating new WebRequest and HttpRequestCachePolicy objects. O objeto de HttpRequestCachePolicy é criado usando o membro de Default de enumeração HttpRequestCacheLevel .The HttpRequestCachePolicy object is created using the Default member of the HttpRequestCacheLevel enumeration.

A propriedade de CachePolicy do objeto de WebRequest é definida com o objeto de HttpRequestCachePolicy .The CachePolicy property of the WebRequest object is set with the HttpRequestCachePolicy object.

Uma instância da classe XmlCachingResolver é criada com o enableHttpCachingde Boolean.An instance of the XmlCachingResolver class is created with the Boolean enableHttpCaching. Quando esse valor é definido como true, a instância resolve um recurso do cache padrão, se possível.When this value is set to true, the instance resolves a resource from the default cache if possible. Quando enableHttpCaching é definido como false, a instância usa o comportamento padrão e resolve os recursos de sua origem.When enableHttpCaching is set to false, the instance uses the default behavior and resolves resources from their source.

Observação

Este exemplo aproveita a extensibilidade das classes XML no .NET Framework.This example leverages the extensibility of the XML classes in the .NET Framework. Outras classes podem ser estendidas e personalizado para atender às necessidades de um determinado aplicativo.Other classes can be extended and customized to suit the needs of a particular application.

Construtores

XmlUrlResolver()

Inicializa uma nova instância da classe XmlUrlResolver.Initializes a new instance of the XmlUrlResolver class.

Propriedades

CachePolicy

Obtém ou define a política de cache para o objeto WebRequest subjacente.Gets or sets the cache policy for the underlying WebRequest object.

Credentials

Define as credenciais usadas para autenticar solicitações da Web.Sets credentials used to authenticate web requests.

Proxy

Obtém ou define o proxy de rede para o objeto WebRequest subjacente.Gets or sets the network proxy for the underlying WebRequest object.

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.Determines whether the specified object is equal to the current object.

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

Mapeia um URI para um objeto que contém o recurso real.Maps a URI to an object that contains the actual resource.

GetEntityAsync(Uri, String, Type)

Mapeia de forma assíncrona um URI para um objeto que contém o recurso real.Asynchronously maps a URI to an object that contains the actual resource.

GetHashCode()

Serve como a função de hash padrão.Serves as the default hash function.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.Gets the Type of the current instance.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
ResolveUri(Uri, String)

Resolve o URI absoluto dos URIs de base e relativo.Resolves the absolute URI from the base and relative URIs.

SupportsType(Uri, Type)

Habilita o resolvedor para tipos de retorno diferentes de Stream.Enables the resolver to return types other than Stream.

(Herdado de XmlResolver)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.Returns a string that represents the current object.

(Herdado de Object)

Aplica-se a

Veja também