XmlUrlResolver Класс

Определение

Разрешает внешние ресурсы XML, имена которых заданы с помощью универсального кода ресурса (URI).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
Наследование
XmlUrlResolver

Примеры

В следующем примере создается XmlReader, использующий XmlUrlResolver с учетными данными по умолчанию.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)

Комментарии

XmlUrlResolver используется для разрешения внешних ресурсов XML, таких как сущности, определения типов документов (DTD) или схемы.XmlUrlResolver is used to resolve external XML resources such as entities, document type definitions (DTDs) or schemas. Он также используется для обработки элементов include и Import, найденных в таблицах стилей XSL или схемах языка определения схемы XML (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 является распознавателем по умолчанию для всех классов в пространстве имен System.Xml.XmlUrlResolver is the default resolver for all classes in the System.Xml namespace. Поддерживаются протоколы file:// и http:// и запросы из класса WebRequest.It supports the file:// and http:// protocols and requests from the WebRequest class.

Важно!

Объекты XmlUrlResolver могут содержать конфиденциальные сведения, например учетные данные пользователей.XmlUrlResolver objects can contain sensitive information such as user credentials. Следует соблюдать осторожность при кэшировании объектов XmlUrlResolver и не следует передавать XmlUrlResolver объекты в ненадежный компонент.You should be careful when you cache XmlUrlResolver objects and should not pass XmlUrlResolver objects to an untrusted component.

Разрешение DTDResolving DTDs

Если средство чтения XML (XmlReader) считывает XML-файл, содержащий внешний DTD, он вызывает метод XmlUrlResolver.GetEntityAsync для получения потокового представления 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. Если URI DTD является относительным URI, модуль чтения XML вызывает метод XmlUrlResolver.ResolveUri и возвращает абсолютный универсальный код ресурса (URI) для заданных параметров relativeUri и baseURi.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. Если XmlUrlResolver не знает, как разрешить универсальный код ресурса (URI), он возвращает null.If the XmlUrlResolver doesn't know how to resolve the URI, it returns null.

Метод XmlUrlResolver.GetEntity использует эти сведения в свойстве Credentials, если это необходимо для получения доступа к ресурсу.The XmlUrlResolver.GetEntity method uses the information in the Credentials property as appropriate to gain access to the resource. По соображениям безопасности метод доступа get к этому свойству не предусмотрен.There is no get accessor to this property for security reasons. При перезаписи XmlResolverметод Entity является методом, который использует учетные данные в свойстве учетных данных .When overwriting XmlResolver, GetEntity is the method that utilizes the credential information in the Credentials property.

Разрешение всех остальных XML-ресурсов выполняется аналогично разрешению DTD.Resolving all other XML resources is very similar to resolving DTDs. XmlResolver согласовывает соединение с внешним ресурсом и возвращает Stream представление содержимого.XmlResolver negotiates the connection with the external resource and returns a Stream representation of the content. Объект, выполняющий вызов XmlResolver интерпретирует поток.The object that is making the call to XmlResolver interprets the stream.

Расширение класса класса XmlUrlResolverExtending the XmlUrlResolver class

Поведением по умолчанию класса XmlUrlResolver является разрешение ресурса с XML-данными из его источника, а не из кэша.The default behavior of the XmlUrlResolver class is to resolve an XML data resource from its source, not from cache. В некоторых случаях разрешение ресурса данных из кэша может улучшить производительность приложения, исключив время на доступ к серверу с ресурсами данных.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. Необходимо взвесить выигрыш в производительности и сравнить его с затратами на обновление содержимого.The performance gains here must be weighed against the need for up-to-date content.

Следующий пример расширяет XmlUrlResolver и создает новый класс XmlCachingResolverдля получения ресурсов из кэша.The following example extends XmlUrlResolver and builds a new class, XmlCachingResolver, to retrieve resources from the cache. Это осуществляется переопределением свойства XmlUrlResolver.Credentials и метода 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

Работа класса XmlCachingResolver с кэшем реализуется в методе GetEntity.The caching behavior of the XmlCachingResolver class is implemented in the GetEntity method. Это делается с помощью создания объектов WebRequest и HttpRequestCachePolicy.This is done by creating new WebRequest and HttpRequestCachePolicy objects. Объект HttpRequestCachePolicy создается с использованием элемента Default перечисления HttpRequestCacheLevel.The HttpRequestCachePolicy object is created using the Default member of the HttpRequestCacheLevel enumeration.

Свойство CachePolicy объекта WebRequest устанавливается объектом HttpRequestCachePolicy.The CachePolicy property of the WebRequest object is set with the HttpRequestCachePolicy object.

Экземпляр класса XmlCachingResolver создается с Boolean enableHttpCaching.An instance of the XmlCachingResolver class is created with the Boolean enableHttpCaching. Если это значение равно true, экземпляр разрешает ресурс из кэша по умолчанию, если это возможно.When this value is set to true, the instance resolves a resource from the default cache if possible. Если enableHttpCaching имеет значение false, то экземпляр использует поведение по умолчанию и разрешает ресурсы из их источника.When enableHttpCaching is set to false, the instance uses the default behavior and resolves resources from their source.

Примечание

В этом примере используется расширяемость классов XML в .NET Framework.This example leverages the extensibility of the XML classes in the .NET Framework. Для нужд конкретного приложения можно расширить и настроить другие классы.Other classes can be extended and customized to suit the needs of a particular application.

Конструкторы

XmlUrlResolver()

Инициализация нового экземпляра класса XmlUrlResolver.Initializes a new instance of the XmlUrlResolver class.

Свойства

CachePolicy

Получает или задает политику кэширования для базового объекта WebRequest.Gets or sets the cache policy for the underlying WebRequest object.

Credentials

Задает учетные данные, используемые для проверки подлинности веб-запросов.Sets credentials used to authenticate web requests.

Proxy

Получает или задает сетевой прокси-сервер для соответствующего объекта WebRequest.Gets or sets the network proxy for the underlying WebRequest object.

Методы

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)
GetEntity(Uri, String, Type)

Сопоставляет код URI с объектом, содержащим фактический ресурс.Maps a URI to an object that contains the actual resource.

GetEntityAsync(Uri, String, Type)

Асинхронно сопоставляет URI с объектом, содержащим фактический ресурс.Asynchronously maps a URI to an object that contains the actual resource.

GetHashCode()

Служит в качестве хэш-функции по умолчанию.Serves as the default hash function.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
ResolveUri(Uri, String)

Разрешает абсолютный URI на основе базового и относительного URI.Resolves the absolute URI from the base and relative URIs.

SupportsType(Uri, Type)

Позволяет сопоставителю возвращать типы, отличные от Stream.Enables the resolver to return types other than Stream.

(Унаследовано от XmlResolver)
ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Унаследовано от Object)

Применяется к

Дополнительно