XmlResolver 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 XmlResolver abstract
public abstract class XmlResolver
type XmlResolver = class
Public MustInherit Class XmlResolver
- Herança
-
XmlResolver
- Derivado
Exemplos
O exemplo a seguir cria um XmlUrlResolver com credenciais padrão. Um XmlReader é usado para ler e exibir o fluxo de dados resultante.
using System;
using System.Xml;
using System.IO;
class Example
{
static void Main()
{
// Create an XmlUrlResolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
// Point the resolver at the desired resource and resolve as a stream.
Uri baseUri = new Uri("http://serverName/");
Uri fulluri = resolver.ResolveUri(baseUri, "fileName.xml");
Stream s = (Stream)resolver.GetEntity(fulluri, null, typeof(Stream));
// Create the reader with the resolved stream and display the data.
XmlReader reader = XmlReader.Create(s);
while (reader.Read())
{
Console.WriteLine(reader.ReadOuterXml());
}
}
}
Imports System.Xml
Imports System.IO
Module Module1
Sub Main()
' Create an XmlUrlResolver with default credentials.
Dim resolver As New XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
' Point the resolver at the desired resource and resolve as a stream.
Dim baseUri As New Uri("http://serverName/")
Dim fulluri As Uri = resolver.ResolveUri(baseUri, "fileName.xml")
Dim s As Stream = CType(resolver.GetEntity(fulluri, Nothing, GetType(Stream)), Stream)
' Create the reader with the resolved stream and display the data.
Dim reader As XmlReader = XmlReader.Create(s)
While reader.Read()
Console.WriteLine(reader.ReadOuterXml())
End While
End Sub
End Module
Comentários
O XmlResolver tipo é 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).
XmlResolver manipula todos os aspectos da negociação da conexão com os recursos, incluindo o tratamento de credenciais de segurança, a abertura da conexão com a fonte de dados e o retorno do recurso na forma de um fluxo ou outro tipo de objeto. O objeto que chama XmlResolver tem a tarefa de interpretar o fluxo.
O System.Xml namespace inclui a seguinte implementação concreta da XmlResolver classe:
-
XmlUrlResolver é o resolvedor padrão para todas as classes no System.Xml namespace. Ele dá suporte aos
file://protocolos ehttp://solicitações da System.Net.WebRequest classe. Para obter exemplos de extensão da classe para melhorar o desempenho, consulte a XmlUrlResolver página de referência.
Você pode criar e especificar seu próprio resolvedor. Se você não especificar um resolvedor, o leitor usará um padrão XmlUrlResolver sem credenciais de usuário.
Especifique o XmlResolver a ser usado definindo a propriedade XmlReaderSettings.XmlResolver e passando o objeto XmlReaderSettings no método Create.
Se o recurso for armazenado em um sistema que requer autenticação, use a XmlResolver.Credentials propriedade para especificar as credenciais necessárias.
Fornecer credenciais de autenticação
O arquivo que contém os dados XML a serem lidos pode ter uma política de acesso restrito. Se a autenticação for necessária para acessar um recurso de rede, use a Credentials propriedade para especificar as credenciais necessárias. Se a Credentials propriedade não estiver definida, as credenciais serão definidas como null.
Por exemplo, suponha que as credenciais sejam necessárias ao solicitar dados da Web para fins de autenticação. A menos que o diretório virtual da Web permita acesso anônimo, você deve definir a Credentials propriedade para fornecer credenciais. O exemplo a seguir cria um objeto XmlReader que usa um XmlUrlResolver com credenciais padrão para acessar o site http://localhost/bookstore/inventory.xml.
// Create a resolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
// Set the reader settings object to use the resolver.
settings.XmlResolver = resolver;
// Create the XmlReader object.
XmlReader reader = XmlReader.Create("http://ServerName/data/books.xml", settings);
' Create a resolver with default credentials.
Dim resolver as XmlUrlResolver = new XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
' Set the reader settings object to use the resolver.
settings.XmlResolver = resolver
' Create the XmlReader object.
Dim reader as XmlReader = XmlReader.Create("http://ServerName/data/books.xml", settings)
Você pode fornecer credenciais diferentes para URIs diferentes e adicioná-las a um cache. Essas credenciais são usadas para verificar a autenticação das diferentes URIs, independentemente da origem original do XML. O exemplo a seguir mostra como adicionar credenciais a um cache.
// Create the credentials.
NetworkCredential myCred = new NetworkCredential(UserName,SecurelyStoredPassword,Domain);
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri("http://www.contoso.com/"), "Basic", myCred);
myCache.Add(new Uri("http://app.contoso.com/"), "Basic", myCred);
// Set the credentials on the XmlUrlResolver object.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = myCache;
// Compile the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("http://serverName/data/xsl/order.xsl",XsltSettings.Default, resolver);
' Create the credentials.
Dim myCred As NetworkCredential = New NetworkCredential(UserName,SecurelyStoredPassword,Domain)
Dim myCache As CredentialCache = New CredentialCache()
myCache.Add(new Uri("http://www.contoso.com/"), "Basic", myCred)
myCache.Add(new Uri("http://app.contoso.com/"), "Basic", myCred)
' Set the credentials on the XmlUrlResolver object.
Dim resolver As XmlUrlResolver = New XmlUrlResolver()
resolver.Credentials = myCache
' Compile the style sheet.
Dim xslt As XslCompiledTransform = New XslCompiledTransform()
xslt.Load("http://serverName/data/xsl/order.xsl", XsltSettings.Default, resolver)
Considerações de segurança
Considere os itens a seguir ao trabalhar com a XmlResolver classe.
XmlResolver os objetos podem conter informações confidenciais, como credenciais de usuário. Você deve ter cuidado ao armazenar objetos em cache XmlResolver e não deve passar o XmlResolver objeto para um componente não confiável.
Se você estiver criando uma classe de propriedade que usa a classe de XmlResolver , a propriedade deve ser definida como uma propriedade somente de escrita. A propriedade pode ser usada para especificar o uso do XmlResolver, mas não pode ser usada para retornar um objeto XmlResolver.
Se o aplicativo aceitar XmlResolver objetos de código não confiável, você não poderá assumir que o URI passado para o GetEntity método será o mesmo que o retornado pelo ResolveUri método. Classes derivadas da XmlResolver classe podem substituir o GetEntity método e retornar dados diferentes dos contidos no URI original.
Seu aplicativo pode mitigar as ameaças de negação de serviço à memória no método GetEntity implementando um IStream que limita o número de bytes lidos. Isso ajuda a proteger-se contra situações em que o código mal-intencionado tenta passar um fluxo infinito de bytes para o GetEntity método.
Construtores
| Nome | Description |
|---|---|
| XmlResolver() |
Inicializa uma nova instância da classe XmlResolver. |
Propriedades
| Nome | Description |
|---|---|
| Credentials |
Quando substituído em uma classe derivada, define as credenciais usadas para autenticar solicitações da Web. |
| FileSystemResolver |
Obtém um resolvedor XML que resolve apenas URIs do sistema de arquivos. |
| ThrowingResolver |
Obtém um resolvedor XML que proíbe a resolução de entidade. |
Métodos
| Nome | Description |
|---|---|
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| GetEntity(Uri, String, Type) |
Quando substituído em uma classe derivada, 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. |
| 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) |
Quando substituído em uma classe derivada, resolve o URI absoluto das URIs base e relativas. |
| SupportsType(Uri, Type) |
Permite que o resolvedor retorne tipos diferentes de Stream. |
| ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |