XmlUrlResolver Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
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 System.Xml namespace. Suporta file://
e os protocolos e as solicitações de http://
de WebRequest classe.
Importante
os objetos deXmlUrlResolver podem conter informações sigilosas como credenciais do usuário. Você deve ter cuidado ao armazenar objetos em cache XmlUrlResolver 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 XmlUrlResolver.GetEntityAsync método para obter uma representação de fluxo do DTD. Se o URI do DTD for um URI relativo, o leitor XML chamará o XmlUrlResolver.ResolveUri método e retornará um URI absoluto para os parâmetros e baseURi
fornecidosrelativeUri
. Se o XmlUrlResolver URI não souber como resolver, ele retornará null
.
O método de XmlUrlResolver.GetEntity usa as informações na propriedade de Credentials como apropriada para acessar o recurso. Não há nenhum acessador de get
a essa propriedade por razões de segurança. Ao substituir XmlResolver, GetEntity é o método que utiliza as informações de credencial na propriedade Credentials .
Resolver todos outros recursos XML é muito semelhante a resolver os DTDs. XmlResolver negocia a conexão com o recurso externo e retorna uma Stream representação do conteúdo. O objeto que está fazendo a chamada para XmlResolver interpretar o fluxo.
Estendendo a classe XmlUrlResolver
O comportamento padrão da classe de XmlUrlResolver é resolver um recurso de dados 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 processamento para o servidor de recurso de dados. Os ganhos de desempenho aqui sejam devem ser contra a necessidade para o conteúdo atualizado.
O exemplo a seguir estende XmlUrlResolver e cria uma nova classe XmlCachingResolver
para recuperar recursos do cache. Isso é feito substituindo a propriedade de XmlUrlResolver.Credentials e o método de 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 cachê da classe de XmlCachingResolver
é implementado no método de GetEntity
. Isso é feito criando um novo WebRequest e objetos de HttpRequestCachePolicy . O objeto de HttpRequestCachePolicy é criado usando o membro de Default de enumeração HttpRequestCacheLevel .
A propriedade de CachePolicy do objeto de WebRequest é definida com o objeto de HttpRequestCachePolicy .
Uma instância da XmlCachingResolver
classe é criada com o Boolean
enableHttpCaching
. Quando esse valor é definido como true
, a instância resolve um recurso do cache padrão, se possível. Quando enableHttpCaching
é definida como false
, a instância usa o comportamento padrão e resolve recursos de sua origem.
Observação
Este exemplo aproveita a extensibilidade das classes XML no .NET Framework. Outras classes podem ser estendidas e personalizado para atender às necessidades de um determinado aplicativo.
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 Object atual. (Herdado de Object) |
ResolveUri(Uri, String) |
Resolve o URI absoluto dos URIs de base e relativo. |
ResolveUri(Uri, String) |
Quando substituído em uma classe derivada, resolve o URI absoluto dos URIs base e relativo. (Herdado de XmlResolver) |
SupportsType(Uri, Type) |
Habilita o resolvedor para tipos de retorno diferentes de Stream. (Herdado de XmlResolver) |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |