XmlUrlResolver Класс

Определение

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


// 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) или схемы. Он также используется для обработки элементов включения и импорта, найденных в таблицах стилей XSL или схемах XSD.

XmlUrlResolver — сопоставитель по умолчанию для всех классов в System.Xml пространстве имен. Поддерживаются протоколы file:// и http:// и запросы из класса WebRequest.

Важно!

Объекты XmlUrlResolver могут содержать конфиденциальные сведения, например учетные данные пользователей. Следует соблюдать осторожность при кэшировании XmlUrlResolver объектов и не XmlUrlResolver передавать объекты в ненадежный компонент.

Разрешение DTD

Если средство чтения XML (XmlReader) считывает XML-файл, содержащий внешний DTD, он вызывает XmlUrlResolver.GetEntityAsync метод для получения потока представления DTD. Если URI DTD является относительным URI, средство чтения XML вызывает XmlUrlResolver.ResolveUri метод и возвращает абсолютный URI для заданных relativeUri и baseURi параметров. XmlUrlResolver Если не знает, как разрешить универсальный код ресурса (URI), он возвращает .null

Метод XmlUrlResolver.GetEntity использует эти сведения в свойстве Credentials, если это необходимо для получения доступа к ресурсу. По соображениям безопасности метод доступа get к этому свойству не предусмотрен. При перезаписи XmlResolverGetEntity — это метод, который использует учетные данные в свойстве Credentials.

Разрешение всех остальных XML-ресурсов выполняется аналогично разрешению DTD. XmlResolver согласовывает соединение с внешним ресурсом Stream и возвращает представление содержимого. Объект, выполняющий вызов для XmlResolver интерпретации потока.

Расширение класса XmlUrlResolver

Поведением по умолчанию класса XmlUrlResolver является разрешение ресурса с XML-данными из его источника, а не из кэша. В некоторых случаях разрешение ресурса данных из кэша может улучшить производительность приложения, исключив время на доступ к серверу с ресурсами данных. Необходимо взвесить выигрыш в производительности и сравнить его с затратами на обновление содержимого.

В следующем примере расширяется XmlUrlResolver и создается новый класс для XmlCachingResolverполучения ресурсов из кэша. Это осуществляется переопределением свойства XmlUrlResolver.Credentials и метода 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

Работа класса XmlCachingResolver с кэшем реализуется в методе GetEntity. Это делается с помощью создания объектов WebRequest и HttpRequestCachePolicy. Объект HttpRequestCachePolicy создается с использованием элемента Default перечисления HttpRequestCacheLevel.

Свойство CachePolicy объекта WebRequest устанавливается объектом HttpRequestCachePolicy.

Экземпляр XmlCachingResolver класса создается с помощью Boolean enableHttpCaching. Если это значение задано true, экземпляр разрешает ресурс из кэша по умолчанию, если это возможно. Если enableHttpCaching задано значение false, экземпляр использует поведение по умолчанию и разрешает ресурсы из источника.

Примечание

В этом примере используется расширяемость классов XML в платформа .NET Framework. Для нужд конкретного приложения можно расширить и настроить другие классы.

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

XmlUrlResolver()

Инициализирует новый экземпляр класса XmlUrlResolver.

Свойства

CachePolicy

Получает или задает политику кэширования для базового объекта WebRequest.

Credentials

Задает учетные данные, используемые для проверки подлинности веб-запросов.

Proxy

Получает или задает сетевой прокси-сервер для базового объекта WebRequest.

Методы

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

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

Сопоставляет код URI с объектом, содержащим фактический ресурс.

GetEntityAsync(Uri, String, Type)

Асинхронно сопоставляет URI с объектом, содержащим фактический ресурс.

GetEntityAsync(Uri, String, Type)

Асинхронно сопоставляет URI с объектом, содержащим фактический ресурс.

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

Служит хэш-функцией по умолчанию.

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

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

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

Создает неполную копию текущего объекта Object.

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

Разрешает абсолютный URI на основе базового и относительного URI.

ResolveUri(Uri, String)

Когда переопределено в производном классе, разрешает абсолютный URI из базового и относительного URI.

(Унаследовано от XmlResolver)
SupportsType(Uri, Type)

Позволяет сопоставителю возвращать типы, отличные от Stream.

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

Возвращает строку, представляющую текущий объект.

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

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

См. также раздел