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
- Наследование
Примеры
В следующем примере создается объект 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) |