XmlResolver sınıfı

Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.

Tür XmlResolver , varlıklar, belge türü tanımları (DTD'ler) veya şemalar gibi dış XML kaynaklarını çözümlemek için kullanılır. Genişletilebilir Stil Sayfası Dili (XSL) stil sayfalarında veya XML Şeması tanım dili (XSD) şemalarında bulunan öğeleri dahil etmek ve içeri aktarmak için de kullanılır.

XmlResolver güvenlik kimlik bilgilerini işleme, veri kaynağı bağlantısını açma ve kaynağı bir akış veya başka bir nesne türü biçiminde döndürme dahil olmak üzere, kaynaklara bağlantı konusunda anlaşma sağlamanın tüm yönlerini ele alır. Çağıran XmlResolver nesne, akışı yorumlama görevine sahiptir.

Ad System.Xml alanı, sınıfının iki somut uygulamasını XmlResolver içerir:

  • XmlUrlResolver , ad alanı içindeki System.Xml tüm sınıflar için varsayılan çözümleyicidir. sınıfından file:// ve http:// protokollerini ve isteklerini System.Net.WebRequest destekler. Performansı geliştirmek için sınıfı genişletme örnekleri için başvuru sayfasına bakın XmlUrlResolver .

  • XmlSecureResolver nesneyi sarmalayarak ve erişebileceği kaynakları kısıtlayarak başka bir XmlResolver nesnenin güvenliğini sağlar. Örneğin, XmlSecureResolver belirli İnternet sitelerine veya bölgelerine erişimi yasaklayabilir.

Kendi çözümleyicinizi oluşturabilir ve belirtebilirsiniz. Çözümleyici belirtmezseniz, okuyucu kullanıcı kimlik bilgileri olmadan varsayılanı XmlUrlResolver kullanır.

özelliğini ayarlayarak ve nesnesini yöntemine XmlReaderSettings.XmlResolver geçirerek XmlReaderSettings kullanılacak öğesini Create belirtirsinizXmlResolver.

Kaynak kimlik doğrulaması gerektiren bir sistemde depolanıyorsa, gerekli kimlik bilgilerini belirtmek için özelliğini kullanırsınız XmlResolver.Credentials .

Kimlik doğrulaması kimlik bilgilerini sağlama

Okunacak XML verilerini içeren dosyanın kısıtlı erişim ilkesi olabilir. Bir ağ kaynağına erişmek için kimlik doğrulaması gerekiyorsa, gerekli kimlik bilgilerini belirtmek için özelliğini kullanın Credentials . Credentials Özellik ayarlanmadıysa, kimlik bilgileri olarak nullayarlanır.

Örneğin, kimlik doğrulaması amacıyla web'den veri isteğinde bulunurken kimlik bilgilerinin gerekli olduğunu varsayalım. Web sanal dizini anonim erişime izin vermediği sürece, özelliğini kimlik bilgilerini sağlayacak şekilde ayarlamanız Credentials gerekir. Aşağıdaki örnek, siteye erişmek http://localhost/bookstore/inventory.xml için varsayılan kimlik bilgileriyle kullanan bir XmlReaderXmlUrlResolver nesnesi oluşturur.

// Create a resolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;

// Set the reader settings object to use the resolver.
settings.XmlResolver = resolver;

// Create the XmlReader object.
XmlReader reader = XmlReader.Create("http://ServerName/data/books.xml", settings);
' Create a resolver with default credentials.
Dim resolver as XmlUrlResolver = new XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials

' Set the reader settings object to use the resolver.
settings.XmlResolver = resolver

' Create the XmlReader object.
Dim reader as XmlReader = XmlReader.Create("http://ServerName/data/books.xml", settings)

Farklı URI'ler için farklı kimlik bilgileri sağlayabilir ve bunları önbelleğe ekleyebilirsiniz. Bu kimlik bilgileri, XML'nin özgün kaynağından bağımsız olarak farklı URI'ler için kimlik doğrulamasını denetlemek için kullanılır. Aşağıdaki örnekte önbelleğe kimlik bilgilerinin nasıl ekleneceği gösterilmektedir.

// Create the credentials.
NetworkCredential myCred = new NetworkCredential(UserName,SecurelyStoredPassword,Domain);
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri("http://www.contoso.com/"), "Basic", myCred);
myCache.Add(new Uri("http://app.contoso.com/"), "Basic", myCred);

// Set the credentials on the XmlUrlResolver object.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = myCache;

// Compile the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("http://serverName/data/xsl/order.xsl",XsltSettings.Default, resolver);
' Create the credentials.
Dim myCred As NetworkCredential = New NetworkCredential(UserName,SecurelyStoredPassword,Domain)
Dim myCache As CredentialCache = New CredentialCache()
myCache.Add(new Uri("http://www.contoso.com/"), "Basic", myCred)
myCache.Add(new Uri("http://app.contoso.com/"), "Basic", myCred)

' Set the credentials on the XmlUrlResolver object.
Dim resolver As XmlUrlResolver = New XmlUrlResolver()
resolver.Credentials = myCache

' Compile the style sheet.
Dim xslt As XslCompiledTransform = New XslCompiledTransform()
xslt.Load("http://serverName/data/xsl/order.xsl", XsltSettings.Default, resolver)

Güvenlik konuları

sınıfıyla XmlResolver çalışırken aşağıdaki öğeleri göz önünde bulundurun.

  • XmlResolver nesneleri, kullanıcı kimlik bilgileri gibi hassas bilgiler içerebilir. Nesneleri önbelleğe alırken XmlResolver dikkatli olmanız ve nesneyi güvenilmeyen bir bileşene geçirmemelisiniz XmlResolver .

  • sınıfını kullanan XmlResolver bir sınıf özelliği tasarlarsanız, özelliği salt yazma özelliği olarak tanımlanmalıdır. özelliği kullanılacak öğesini XmlResolver belirtmek için kullanılabilir, ancak nesne XmlResolver döndürmek için kullanılamaz.

  • Uygulamanız güvenilmeyen koddaki nesneleri kabul ederse XmlResolver , yöntemine GetEntity geçirilen URI'nin yöntemi tarafından ResolveUri döndürülenle aynı olacağını varsayamazsınız. sınıfından XmlResolver türetilen sınıflar yöntemini geçersiz kılabilir GetEntity ve özgün URI'de bulunandan farklı veriler döndürebilir.

  • Uygulamanız, okunan bayt sayısını sınırlayan bir IStream uygulayarak yönteme GetEntity yönelik hizmet tehditlerinin bellek reddini azaltabilir. Bu, kötü amaçlı kodun yöntemine sonsuz bayt akışı geçirmeye çalıştığı durumlara karşı korunmaya GetEntity yardımcı olur.