XmlUrlResolver Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
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, null
akan 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
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 Boolean
enableHttpCaching
. 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
- Dokumen XML dan Data