Sdílet prostřednictvím


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 řešení 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í bezpečnostních údajů, otevření připojení ke zdroji dat a vrácení prostředku jako datového proudu nebo jiného typu objektu. Objekt, který volá XmlResolver , má úlohu interpretace datového proudu.

Jmenný prostor System.Xml zahrnuje dvě konkrétní třídy implementace XmlResolver.

  • XmlUrlResolver je výchozí řešitel pro všechny třídy v System.Xml jmenném prostoru. 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í resolver. Pokud nezadáte resolver, systém použije výchozí XmlUrlResolver bez přihlašovacích údajů uživatele.

Určíte, který XmlResolver se má použít, nastavením vlastnosti XmlReaderSettings.XmlResolver a předáním objektu XmlReaderSettings 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 XmlUrlResolver k webu používá http://localhost/bookstore/inventory.xml 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 odepření služby způsobené pamětí pro metodu GetEntity implementováním IStream , 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 .