Udostępnij za pośrednictwem


XmlUrlResolver Klasa

Definicja

Rozpoznaje zewnętrzne zasoby XML nazwane przez identyfikator URI (Uniform Resource Identifier).

public ref class XmlUrlResolver : System::Xml::XmlResolver
public class XmlUrlResolver : System.Xml.XmlResolver
type XmlUrlResolver = class
    inherit XmlResolver
Public Class XmlUrlResolver
Inherits XmlResolver
Dziedziczenie
XmlUrlResolver

Przykłady

Poniższy przykład tworzy XmlReader, który używa XmlUrlResolver z poświadczeniami domyślnymi.


// 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)

Uwagi

XmlUrlResolver służy do rozpoznawania zewnętrznych zasobów XML, takich jak jednostki, definicje typów dokumentów (DTD) lub schematy. Służy również do przetwarzania elementów dołączania i importowania elementów znajdujących się w arkuszach stylów extensible StyleSheet Language (XSL) lub schematach języka definicji schematu XML (XSD).

XmlUrlResolver jest domyślnym narzędziem rozpoznawania dla wszystkich klas w przestrzeni nazw System.Xml. Obsługuje on protokoły file:// i http:// oraz żądania z klasy WebRequest.

Ważny

XmlUrlResolver obiekty mogą zawierać poufne informacje, takie jak poświadczenia użytkownika. Należy zachować ostrożność podczas buforowania obiektów XmlUrlResolver i nie należy przekazywać XmlUrlResolver obiektów do niezaufanego składnika.

Rozpoznawanie identyfikatorów DTD

Jeśli czytnik XML (XmlReader) odczytuje plik XML zawierający zewnętrzny identyfikator DTD, wywołuje metodę XmlUrlResolver.GetEntityAsync w celu uzyskania reprezentacji strumienia dtD. Jeśli identyfikator URI dtD jest względnym identyfikatorem URI, czytnik XML wywołuje metodę XmlUrlResolver.ResolveUri i zwraca bezwzględny identyfikator URI dla danego parametru relativeUri i baseURi. Jeśli XmlUrlResolver nie wie, jak rozpoznać identyfikator URI, zwraca null.

Metoda XmlUrlResolver.GetEntity używa informacji we właściwości Credentials odpowiednio do uzyskania dostępu do zasobu. Nie ma get dostępu do tej właściwości ze względów bezpieczeństwa. Podczas zastępowania XmlResolverGetEntity jest metoda, która korzysta z informacji o poświadczeniach we właściwości Credentials.

Rozpoznawanie wszystkich innych zasobów XML jest bardzo podobne do rozpoznawania dtD. XmlResolver negocjuje połączenie z zasobem zewnętrznym i zwraca Stream reprezentację zawartości. Obiekt, który wykonuje wywołanie w celu XmlResolver interpretuje strumień.

Rozszerzanie klasy XmlUrlResolver

Domyślnym zachowaniem klasy XmlUrlResolver jest rozwiązanie zasobu danych XML ze źródła, a nie z pamięci podręcznej. W niektórych przypadkach rozpoznawanie zasobu danych z pamięci podręcznej może zwiększyć wydajność aplikacji, zapisując podróż na serwer zasobu danych. Tutaj należy rozważyć wzrost wydajności w stosunku do potrzeby up-to-date zawartości.

Poniższy przykład rozszerza XmlUrlResolver i tworzy nową klasę, XmlCachingResolver, aby pobrać zasoby z pamięci podręcznej. Jest to wykonywane przez zastąpienie właściwości XmlUrlResolver.Credentials i metody 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

Zachowanie buforowania klasy XmlCachingResolver jest implementowane w metodzie GetEntity. Odbywa się to przez utworzenie nowych obiektów WebRequest i HttpRequestCachePolicy. Obiekt HttpRequestCachePolicy jest tworzony przy użyciu elementu członkowskiego Default wyliczenia HttpRequestCacheLevel.

Właściwość CachePolicy obiektu WebRequest jest ustawiana z obiektem HttpRequestCachePolicy.

Wystąpienie klasy XmlCachingResolver jest tworzone przy użyciu BooleanenableHttpCaching. Gdy ta wartość zostanie ustawiona na true, wystąpienie rozpozna zasób z domyślnej pamięci podręcznej, jeśli to możliwe. Gdy enableHttpCaching jest ustawiona na false, wystąpienie używa domyślnego zachowania i rozpoznaje zasoby ze źródła.

Nuta

Ten przykład wykorzystuje rozszerzalność klas XML w programie .NET Framework. Inne klasy można rozszerzyć i dostosować do potrzeb określonej aplikacji.

Konstruktory

XmlUrlResolver()

Inicjuje nowe wystąpienie klasy XmlUrlResolver.

Właściwości

CachePolicy

Pobiera lub ustawia zasady pamięci podręcznej dla bazowego obiektu WebRequest.

Credentials

Ustawia poświadczenia używane do uwierzytelniania żądań internetowych.

Proxy

Pobiera lub ustawia serwer proxy sieci dla bazowego obiektu WebRequest.

Metody

Equals(Object)

Określa, czy określony obiekt jest równy bieżącemu obiektowi.

(Odziedziczone po Object)
GetEntity(Uri, String, Type)

Mapuje identyfikator URI na obiekt zawierający rzeczywisty zasób.

GetEntityAsync(Uri, String, Type)

Asynchronicznie mapuje identyfikator URI na obiekt zawierający rzeczywisty zasób.

GetEntityAsync(Uri, String, Type)

Asynchronicznie mapuje identyfikator URI na obiekt zawierający rzeczywisty zasób.

(Odziedziczone po XmlResolver)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Pobiera Type bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Object.

(Odziedziczone po Object)
ResolveUri(Uri, String)

Usuwa bezwzględny identyfikator URI z identyfikatorów URI podstawowych i względnych.

ResolveUri(Uri, String)

Po zastąpieniu w klasie pochodnej rozpoznawanie bezwzględnego identyfikatora URI z podstawowych i względnych identyfikatorów URI.

(Odziedziczone po XmlResolver)
SupportsType(Uri, Type)

Umożliwia programowi rozpoznawania nazw zwracanie typów innych niż Stream.

(Odziedziczone po XmlResolver)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy

Zobacz też