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

W poniższym przykładzie zostanie utworzony obiekt XmlReader , który używa elementu XmlUrlResolver z domyślnymi poświadczeniami.


// 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 znalezionych w arkuszach stylów extensible StyleSheet Language (XSL) lub schematach języka definicji schematu XML (XSD).

XmlUrlResolver to domyślny program rozpoznawania dla wszystkich klas w System.Xml przestrzeni nazw. Obsługuje file:// protokoły i http:// żądania z WebRequest klasy .

Ważne

XmlUrlResolver obiekty mogą zawierać poufne informacje, takie jak poświadczenia użytkownika. Podczas buforowania XmlUrlResolver obiektów należy zachować ostrożność 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 XmlUrlResolver.GetEntityAsync metodę 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 relativeUri parametru i .baseURi Jeśli element XmlUrlResolver nie wie, jak rozpoznać identyfikator URI, zwraca wartość null.

Metoda XmlUrlResolver.GetEntity używa informacji w właściwości odpowiednio Credentials 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 XmlResolvermetoda GetEntity jest metodą wykorzystującą informacje 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 reprezentację Stream zawartości. Obiekt, który wykonuje wywołanie w celu interpretowania XmlResolver strumienia.

Rozszerzanie klasy XmlUrlResolver

Domyślnym zachowaniem XmlUrlResolver klasy 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. W tym miejscu należy rozważyć wzrost wydajności w stosunku do potrzeby aktualnej zawartości.

Poniższy przykład rozszerza XmlUrlResolver i tworzy nową klasę , XmlCachingResolveraby pobrać zasoby z pamięci podręcznej. Odbywa się to przez zastąpienie XmlUrlResolver.Credentials właściwości i XmlUrlResolver.GetEntity metody .

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 XmlCachingResolver buforowania klasy jest implementowane w metodzie GetEntity . Odbywa się to przez utworzenie nowych WebRequest obiektów i HttpRequestCachePolicy . Obiekt HttpRequestCachePolicy jest tworzony przy użyciu Default elementu członkowskiego wyliczenia HttpRequestCacheLevel .

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

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

Uwaga

Ten przykład wykorzystuje rozszerzalność klas XML w .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 obiektu bazowego WebRequest .

Credentials

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

Proxy

Pobiera lub ustawia serwer proxy sieci dla obiektu bazowego WebRequest .

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

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

Mapy identyfikator URI do obiektu zawierającego 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()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

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

(Odziedziczone po Object)
ResolveUri(Uri, String)

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

ResolveUri(Uri, String)

Po zastąpieniu w klasie pochodnej jest rozpoznawany bezwzględny identyfikator URI z identyfikatorów URI bazowych i względnych.

(Odziedziczone po XmlResolver)
SupportsType(Uri, Type)

Umożliwia rozpoznawanie zwraca typów innych niż Stream.

(Odziedziczone po XmlResolver)
ToString()

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

(Odziedziczone po Object)

Dotyczy

Zobacz też