XmlUrlResolver Klass

Definition

Löser externa XML-resurser med namnet av en 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
Arv
XmlUrlResolver

Exempel

I följande exempel skapas en XmlReader som använder en XmlUrlResolver med standardautentiseringsuppgifter.


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

Kommentarer

XmlUrlResolver används för att matcha externa XML-resurser, till exempel entiteter, definitioner av dokumenttyp (DTD) eller scheman. Det används också för att bearbeta inkludera och importera element som finns i XSL-formatmallar (Extensible StyleSheet Language) eller XSD-scheman (XML Schema definition language).

XmlUrlResolver är standardhanterare för alla klasser i System.Xml namnrymden. Den stöder protokoll och file://http:// begäranden från WebRequest klassen.

Important

XmlUrlResolver objekt kan innehålla känslig information, till exempel autentiseringsuppgifter för användare. Du bör vara försiktig när du cachelagrade XmlUrlResolver objekt och inte bör skicka XmlUrlResolver objekt till en ej betrodd komponent.

Lösa DTD:erna

Om en XML-läsare (XmlReader) läser en XML-fil som innehåller en extern DTD anropas XmlUrlResolver.GetEntityAsync metoden för att hämta en strömrepresentation av DTD:t. Om URI:n för DTD är en relativ URI anropar XML-läsaren XmlUrlResolver.ResolveUri metoden och returnerar en absolut URI för angivna relativeUri parametrar och baseURi parametrar. XmlUrlResolver Om den inte vet hur du löser URI:n returneras null.

Metoden XmlUrlResolver.GetEntity använder informationen i egenskapen Credentials efter behov för att få åtkomst till resursen. Det finns ingen get åtkomst till den här egenskapen av säkerhetsskäl. Vid överskrivning XmlResolverär GetEntity den metod som använder information om autentiseringsuppgifter i egenskapen Autentiseringsuppgifter .

Att lösa alla andra XML-resurser liknar att matcha DTD:er. XmlResolver förhandlar anslutningen med den externa resursen och returnerar en Stream representation av innehållet. Objektet som anropar XmlResolver tolkar strömmen.

Utöka klassen XmlUrlResolver

Standardbeteendet för XmlUrlResolver klassen är att matcha en XML-dataresurs från källan, inte från cacheminnet. I vissa fall kan en lösning av en dataresurs från cachen förbättra programmets prestanda genom att spara en resa till dataresursens server. Prestandavinsterna här måste vägas mot behovet av up-to-date-innehåll.

I följande exempel utökas XmlUrlResolver och skapas en ny klass, , XmlCachingResolverför att hämta resurser från cacheminnet. Detta görs genom att XmlUrlResolver.Credentials åsidosätta egenskapen och XmlUrlResolver.GetEntity metoden.

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

Cachelagringsbeteendet för XmlCachingResolver klassen implementeras i GetEntity -metoden. Detta görs genom att skapa nya WebRequest objekt och HttpRequestCachePolicy objekt. Objektet HttpRequestCachePolicy skapas med hjälp Default av HttpRequestCacheLevel uppräkningsmedlemmen.

Objektets CachePolicyWebRequest egenskap anges med HttpRequestCachePolicy objektet.

En instans av XmlCachingResolver klassen skapas med BooleanenableHttpCaching. När det här värdet är inställt på truelöser instansen en resurs från standardcachen om möjligt. När enableHttpCaching är inställt på falseanvänder instansen standardbeteendet och löser resurser från källan.

Note

Det här exemplet utnyttjar utökningsbarheten för XML-klasserna i .NET Framework. Andra klasser kan utökas och anpassas för att passa behoven för ett visst program.

Konstruktorer

Name Description
XmlUrlResolver()

Initierar en ny instans av XmlUrlResolver klassen.

Egenskaper

Name Description
CachePolicy

Hämtar eller anger cacheprincipen för det underliggande WebRequest objektet.

Credentials

Anger autentiseringsuppgifter som används för att autentisera webbbegäranden.

Proxy

Hämtar eller anger nätverksproxyn för det underliggande WebRequest objektet.

Metoder

Name Description
Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetEntity(Uri, String, Type)

Mappar en URI till ett objekt som innehåller den faktiska resursen.

GetEntityAsync(Uri, String, Type)

Mappar asynkront en URI till ett objekt som innehåller den faktiska resursen.

GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
ResolveUri(Uri, String)

Löser den absoluta URI:n från bas- och relativa URI:er.

ResolveUri(Uri, String)

När den åsidosättas i en härledd klass löser den absoluta URI:n från bas- och relativa URI:er.

(Ärvd från XmlResolver)
SupportsType(Uri, Type)

Gör att matcharen kan returnera andra typer än Stream.

(Ärvd från XmlResolver)
ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)

Gäller för

Se även