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 resolver default untuk semua kelas di namespace System.Xml. Ini mendukung protokol file:// dan http://, serta permintaan 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 XmlUrlResolver objek ke komponen yang tidak tepercaya.

Mengatasi DTD

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

Metode ini XmlUrlResolver.GetEntity menggunakan informasi dalam Credentials properti yang sesuai untuk mendapatkan akses ke sumber daya. Tidak ada get aksesor ke properti ini karena alasan keamanan. Saat menimpa XmlResolver, 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 Stream representasi konten. Objek yang melakukan panggilan untuk XmlResolver menginterpretasikan aliran.

Memperluas kelas XmlUrlResolver

Perilaku XmlUrlResolver default kelas 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 mengesampingkan XmlUrlResolver.Credentials properti dan XmlUrlResolver.GetEntity metode .

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 XmlCachingResolver kelas diimplementasikan dalam GetEntity metode . Ini dilakukan dengan membuat objek dan HttpRequestCachePolicy baruWebRequest. Objek HttpRequestCachePolicy dibuat menggunakan Default anggota HttpRequestCacheLevel enumerasi.

Properti CachePolicyWebRequest objek diatur dengan HttpRequestCachePolicy objek .

Instans XmlCachingResolver kelas dibuat dengan BooleanenableHttpCaching. Ketika nilai ini diatur ke true, instans menyelesaikan sumber daya dari cache default jika memungkinkan. Ketika 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

Nama Deskripsi
XmlUrlResolver()

Menginisialisasi instans baru dari kelas XmlUrlResolver.

Properti

Nama Deskripsi
CachePolicy

Mendapatkan atau mengatur kebijakan cache untuk objek yang mendasar WebRequest .

Credentials

Mengatur kredensial yang digunakan untuk mengautentikasi permintaan web.

Proxy

Mendapatkan atau mengatur proksi jaringan untuk objek yang mendasar WebRequest .

Metode

Nama Deskripsi
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.

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