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


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 не знает, как устранить универсальный код ресурса (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 .

Свойство CachePolicyWebRequest объекта задается объектом 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) с объектом, содержащим фактический ресурс.

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)

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

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