XmlUrlResolver Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Resolve recursos XML externos nomeados por um Identificador Uniforme de Recursos (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
Exemplos
O exemplo seguinte cria um XmlReader que usa um XmlUrlResolver com credenciais por defeito.
// 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)
Observações
XmlUrlResolver é usado para resolver recursos XML externos, como entidades, definições de tipos de documentos (DTDs) ou esquemas. Também é usado para processar, incluir e importar elementos encontrados em folhas de estilo da Extensible StyleSheet Language (XSL) ou esquemas XML Schema Definition Language (XSD).
XmlUrlResolver é o resolvedor padrão para todas as classes no System.Xml namespace. Ele suporta os file:// protocolos e http:// solicitações da WebRequest classe.
Importante
XmlUrlResolver objetos podem conter informações confidenciais, como credenciais de usuário. Deves ter cuidado ao armazenar objetos em cache XmlUrlResolver e não deves passar XmlUrlResolver objetos para um componente não confiável.
Resolução de DTDs
Se um leitor XML (XmlReader) estiver a ler um ficheiro XML que contém uma DTD externa, chama o XmlUrlResolver.GetEntityAsync método para obter uma representação em fluxo da DTD. Se o URI do DTD for um URI relativo, o leitor XML chama o XmlUrlResolver.ResolveUri método e devolve um URI absoluto para os parâmetros dadosrelativeUri.baseURi Se não XmlUrlResolver souber como resolver o URI, devolve null.
O XmlUrlResolver.GetEntity método utiliza a informação da Credentials propriedade conforme apropriado para aceder ao recurso. Não há get acesso a esta propriedade por razões de segurança. Ao sobrescrever XmlResolver, o GetEntity é o método que utiliza a informação de credencial na propriedade Credenciais .
Resolver todos os outros recursos XML é muito semelhante a resolver DTDs. XmlResolver negocia a ligação com o recurso externo e devolve uma Stream representação do conteúdo. O objeto que faz a chamada XmlResolver interpreta o fluxo.
Extensão da classe XmlUrlResolver
O comportamento padrão da XmlUrlResolver classe é resolver um recurso de dados XML a partir da sua origem, e não da cache. Em alguns casos, resolver um recurso de dados a partir da cache pode melhorar o desempenho de uma aplicação ao poupar uma viagem para o servidor do recurso de dados. Os ganhos de desempenho aqui devem ser ponderados face à necessidade de conteúdo de up-todata.
O exemplo seguinte estende XmlUrlResolver e constrói uma nova classe, XmlCachingResolver, para recuperar recursos do cache. Isto é feito sobrepondo a XmlUrlResolver.Credentials propriedade e o XmlUrlResolver.GetEntity método.
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 XmlCachingResolver classe é implementado no GetEntity método. Isto é feito criando novos WebRequest e HttpRequestCachePolicy objetos. O HttpRequestCachePolicy objeto é criado usando o Default membro da HttpRequestCacheLevel enumeração.
A CachePolicy propriedade do WebRequest objeto é definida com o HttpRequestCachePolicy objeto.
Uma instância da XmlCachingResolver classe é criada com o BooleanenableHttpCaching. Quando este valor é definido para true, a instância resolve um recurso da cache predefinida, se possível. Quando enableHttpCaching está definido para false, a instância usa o comportamento padrão e resolve recursos da sua fonte.
Note
Este exemplo aproveita a extensibilidade das classes XML no .NET Framework. Outras classes podem ser alargadas e personalizadas para se adaptarem às necessidades de uma aplicação específica.
Construtores
| Name | Description |
|---|---|
| XmlUrlResolver() |
Inicializa uma nova instância da XmlUrlResolver classe. |
Propriedades
| Name | Description |
|---|---|
| CachePolicy |
Obtém ou define a política de cache para o objeto subjacente WebRequest . |
| Credentials |
Define credenciais usadas para autenticar pedidos web. |
| Proxy |
Obtém ou define o proxy de rede para o objeto subjacente WebRequest . |
Métodos
| Name | Description |
|---|---|
| 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 assíncronamente um URI para um objeto que contenha o recurso real. |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| ResolveUri(Uri, String) |
Resolve o URI absoluto a partir dos URIs base e relativos. |
| ResolveUri(Uri, String) |
Quando sobrescrito numa classe derivada, resolve o URI absoluto a partir dos URIs base e relativo. (Herdado de XmlResolver) |
| SupportsType(Uri, Type) |
Permite que o resolvedor devolva tipos diferentes de Stream. (Herdado de XmlResolver) |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |