Třída XmlResolver

Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.

Tento XmlResolver typ se používá k překladu externích prostředků XML, jako jsou entity, definice typů dokumentů (DTD) nebo schémata. Používá se také ke zpracování zahrnutí a importu prvků nalezených v šablonách stylů XSL (Extensible Stylesheet Language) nebo schématech XSD (XML Schema Definition Language).

XmlResolver zpracovává všechny aspekty vyjednávání připojení k prostředkům, včetně zpracování přihlašovacích údajů zabezpečení, otevření připojení ke zdroji dat a vrácení prostředku ve formě datového proudu nebo jiného typu objektu. Objekt, který volá XmlResolver , má úlohu interpretace datového proudu.

Obor System.Xml názvů zahrnuje dvě konkrétní implementace XmlResolver třídy:

  • XmlUrlResolver je výchozí překladač pro všechny třídy v System.Xml oboru názvů. Podporuje protokoly file:// a http:// požadavky z System.Net.WebRequest třídy. Příklady rozšíření třídy za účelem zvýšení výkonu najdete na XmlUrlResolver referenční stránce.

  • XmlSecureResolver pomáhá zabezpečit jiný XmlResolver objekt zabalením objektu a omezením prostředků, ke kterým má přístup. Může například XmlSecureResolver zakázat přístup k určitým internetovým webům nebo zónám.

Můžete vytvořit a zadat vlastní překladač. Pokud nezadáte překladač, použije čtenář výchozí XmlUrlResolver bez přihlašovacích údajů uživatele.

Určíte XmlResolver použití nastavením XmlReaderSettings.XmlResolver vlastnosti a předáním XmlReaderSettings objektu metodě Create .

Pokud je prostředek uložený v systému, který vyžaduje ověření, použijete XmlResolver.Credentials vlastnost k zadání potřebných přihlašovacích údajů.

Zadání přihlašovacích údajů pro ověřování

Soubor, který obsahuje data XML ke čtení, může mít zásady omezeného přístupu. Pokud se pro přístup k síťovému prostředku vyžaduje ověřování, použijte Credentials vlastnost k zadání potřebných přihlašovacích údajů. Credentials Pokud vlastnost není nastavena, přihlašovací údaje jsou nastaveny na null.

Předpokládejme například, že přihlašovací údaje jsou potřeba při vyžádání dat z webu pro účely ověřování. Pokud webový virtuální adresář neumožňuje anonymní přístup, musíte nastavit Credentials vlastnost pro zadání přihlašovacích údajů. Následující příklad vytvoří XmlReader objekt, který pro přístup http://localhost/bookstore/inventory.xml k webu používá XmlUrlResolver výchozí přihlašovací údaje.

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

Můžete zadat různé přihlašovací údaje pro různé identifikátory URI a přidat je do mezipaměti. Tyto přihlašovací údaje slouží ke kontrole ověřování různých identifikátorů URI bez ohledu na původní zdroj XML. Následující příklad ukazuje, jak přidat přihlašovací údaje do mezipaměti.

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

Bezpečnostní aspekty

Při práci s XmlResolver třídou zvažte následující položky.

  • XmlResolver objekty mohou obsahovat citlivé informace, jako jsou přihlašovací údaje uživatele. Při ukládání objektů do mezipaměti XmlResolver byste měli být opatrní a neměli byste objekt předat XmlResolver nedůvěryhodné komponentě.

  • Pokud navrhujete vlastnost třídy, která tuto třídu používá XmlResolver , měla by být vlastnost definována jako vlastnost jen pro zápis. Vlastnost lze použít k určení XmlResolver , která se má použít, ale nelze ji použít k vrácení objektu XmlResolver .

  • Pokud vaše aplikace přijímá XmlResolver objekty z nedůvěryhodného kódu, nemůžete předpokládat, že identifikátor URI předaný do GetEntity metody bude stejný jako vrácené metodou ResolveUri . Třídy odvozené z XmlResolver třídy mohou přepsat metodu GetEntity a vrátit data, která se liší od toho, co bylo obsaženo v původním identifikátoru URI.

  • Aplikace může zmírnit hrozby pro odepření služby do paměti metodou GetEntityIStream implementací, která omezuje počet přečtených bajtů. To pomáhá chránit před situacemi, kdy se škodlivý kód pokusí předat do metody nekonečný proud bajtů GetEntity .