Bagikan melalui


XmlUrlResolver Kelas

Definisi

Menyelesaikan sumber daya XML eksternal yang dinamai oleh Pengidentifikasi Sumber Daya Seragam (URI).

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

Contoh

Contoh berikut membuat XmlReader yang menggunakan XmlUrlResolver dengan kredensial default.


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

Keterangan

XmlUrlResolver digunakan untuk mengatasi sumber daya XML eksternal seperti entitas, definisi jenis dokumen (DTD) atau skema. Ini juga digunakan untuk memproses menyertakan dan mengimpor elemen yang ditemukan dalam lembar gaya Extensible StyleSheet Language (XSL) atau skema bahasa definisi Skema XML (XSD).

XmlUrlResolver adalah pemecah masalah default untuk semua kelas di namespace System.Xml. Ini mendukung protokol dan permintaan file:// dan http:// dari kelas WebRequest.

Penting

XmlUrlResolver objek dapat berisi informasi sensitif seperti kredensial pengguna. Anda harus berhati-hati ketika Anda menyimpan XmlUrlResolver objek dan tidak boleh meneruskan objek XmlUrlResolver ke komponen yang tidak tepercaya.

Mengatasi DTD

Jika pembaca XML (XmlReader) membaca file XML yang berisi DTD eksternal, ia memanggil metode XmlUrlResolver.GetEntityAsync untuk mendapatkan representasi aliran DTD. Jika URI DTD adalah URI relatif, pembaca XML memanggil metode XmlUrlResolver.ResolveUri dan mengembalikan URI absolut untuk parameter relativeUri dan baseURi yang diberikan. Jika XmlUrlResolver tidak tahu cara mengatasi URI, nullakan dikembalikan.

Metode XmlUrlResolver.GetEntity menggunakan informasi di properti Credentials yang sesuai untuk mendapatkan akses ke sumber daya. Tidak ada aksesor get ke properti ini karena alasan keamanan. Saat menimpa , GetEntity adalah metode yang menggunakan informasi kredensial di properti Kredensial .

Menyelesaikan semua sumber daya XML lainnya sangat mirip dengan menyelesaikan DTD. XmlResolver menegosiasikan koneksi dengan sumber daya eksternal dan mengembalikan representasi konten Stream. Objek yang melakukan panggilan ke XmlResolver menginterpretasikan aliran.

Memperluas kelas XmlUrlResolver

Perilaku default kelas XmlUrlResolver adalah menyelesaikan sumber daya data XML dari sumbernya, bukan dari cache. Dalam beberapa kasus, menyelesaikan sumber daya data dari cache dapat meningkatkan performa aplikasi dengan menyimpan perjalanan ke server sumber daya data. Perolehan performa di sini harus ditimbang berdasarkan kebutuhan akan konten up-to-tanggal.

Contoh berikut memperluas XmlUrlResolver dan membangun kelas baru, XmlCachingResolver, untuk mengambil sumber daya dari cache. Ini dilakukan dengan mengambil alih properti XmlUrlResolver.Credentials dan metode 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

Perilaku penembolokan kelas XmlCachingResolver diimplementasikan dalam metode GetEntity. Ini dilakukan dengan membuat objek WebRequest dan HttpRequestCachePolicy baru. Objek HttpRequestCachePolicy dibuat menggunakan anggota Default enumerasi HttpRequestCacheLevel.

Properti CachePolicy objek WebRequest diatur dengan objek HttpRequestCachePolicy.

Instans kelas XmlCachingResolver dibuat dengan BooleanenableHttpCaching. Ketika nilai ini diatur ke true, instans menyelesaikan sumber daya dari cache default jika memungkinkan. Saat enableHttpCaching diatur ke false, instans menggunakan perilaku default dan menyelesaikan sumber daya dari sumbernya.

Nota

Contoh ini memanfaatkan ekstensibilitas kelas XML di .NET Framework. Kelas lain dapat diperluas dan disesuaikan agar sesuai dengan kebutuhan aplikasi tertentu.

Konstruktor

XmlUrlResolver()

Menginisialisasi instans baru kelas XmlUrlResolver.

Properti

CachePolicy

Mendapatkan atau mengatur kebijakan cache untuk objek WebRequest yang mendasar.

Credentials

Mengatur kredensial yang digunakan untuk mengautentikasi permintaan web.

Proxy

Mendapatkan atau mengatur proksi jaringan untuk objek WebRequest yang mendasar.

Metode

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetEntity(Uri, String, Type)

Memetakan URI ke objek yang berisi sumber daya aktual.

GetEntityAsync(Uri, String, Type)

Secara asinkron memetakan URI ke objek yang berisi sumber daya aktual.

GetEntityAsync(Uri, String, Type)

Secara asinkron memetakan URI ke objek yang berisi sumber daya aktual.

(Diperoleh dari XmlResolver)
GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetType()

Mendapatkan Type instans saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari Objectsaat ini.

(Diperoleh dari Object)
ResolveUri(Uri, String)

Menyelesaikan URI absolut dari URI dasar dan relatif.

ResolveUri(Uri, String)

Ketika ditimpa dalam kelas turunan, menyelesaikan URI absolut dari URI dasar dan relatif.

(Diperoleh dari XmlResolver)
SupportsType(Uri, Type)

Memungkinkan resolver mengembalikan jenis selain Stream.

(Diperoleh dari XmlResolver)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Berlaku untuk

Lihat juga