Поделиться через


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 из источника, а не из кэша. В некоторых случаях разрешение ресурса данных из кэша может повысить производительность приложения, сохранив поездку на сервер ресурса данных. Повышение производительности должно быть взвешировано в отношении необходимости up-to-даты содержимого.

В следующем примере расширяется 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 создается с помощью BooleanenableHttpCaching. Если для этого значения задано значение 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)

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

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