Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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://ahttp://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 .