XmlResolver 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
URI(Uniform Resource Identifier)로 명명된 외부 XML 리소스를 확인합니다.
public ref class XmlResolver abstract
public abstract class XmlResolver
type XmlResolver = class
Public MustInherit Class XmlResolver
- 상속
-
XmlResolver
- 파생
예제
다음 예제에서는 기본 자격 증명을 사용하여 XmlUrlResolver 만듭니다. A XmlReader 는 결과 데이터 스트림을 읽고 표시하는 데 사용됩니다.
using System;
using System.Xml;
using System.IO;
class Example
{
static void Main()
{
// Create an XmlUrlResolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
// Point the resolver at the desired resource and resolve as a stream.
Uri baseUri = new Uri("http://serverName/");
Uri fulluri = resolver.ResolveUri(baseUri, "fileName.xml");
Stream s = (Stream)resolver.GetEntity(fulluri, null, typeof(Stream));
// Create the reader with the resolved stream and display the data.
XmlReader reader = XmlReader.Create(s);
while (reader.Read())
{
Console.WriteLine(reader.ReadOuterXml());
}
}
}
Imports System.Xml
Imports System.IO
Module Module1
Sub Main()
' Create an XmlUrlResolver with default credentials.
Dim resolver As New XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
' Point the resolver at the desired resource and resolve as a stream.
Dim baseUri As New Uri("http://serverName/")
Dim fulluri As Uri = resolver.ResolveUri(baseUri, "fileName.xml")
Dim s As Stream = CType(resolver.GetEntity(fulluri, Nothing, GetType(Stream)), Stream)
' Create the reader with the resolved stream and display the data.
Dim reader As XmlReader = XmlReader.Create(s)
While reader.Read()
Console.WriteLine(reader.ReadOuterXml())
End While
End Sub
End Module
설명
이 XmlResolver 형식은 엔터티, DTD(문서 형식 정의) 또는 스키마와 같은 외부 XML 리소스를 확인하는 데 사용됩니다. XSL(Extensible Stylesheet Language) 스타일시트 또는 XSD(XML 스키마 정의 언어) 스키마에 있는 요소를 포함하고 가져오는 데도 사용됩니다.
XmlResolver 는 보안 자격 증명 처리, 데이터 원본에 대한 연결 열기, 스트림 또는 다른 개체 형식의 형식으로 리소스 반환 등 리소스에 대한 연결 협상의 모든 측면을 처리합니다. 호출 XmlResolver 하는 개체에는 스트림을 해석하는 작업이 있습니다.
네임스페이스에는 System.Xml 클래스의 다음과 같은 구체적인 구현이 XmlResolver 포함됩니다.
-
XmlUrlResolver는 System.Xml 네임스페이스의 모든 클래스에 대한 기본 확인자입니다.
file://및http://프로토콜을 지원하며 System.Net.WebRequest 클래스의 요청을 처리합니다. 성능을 향상시키기 위해 클래스를 확장하는 예제는 참조 페이지를 참조 XmlUrlResolver 하세요.
고유한 리졸버를 만들고 지정할 수 있습니다. 확인자를 지정하지 않으면 판독기는 사용자 자격 증명 없이 기본값 XmlUrlResolver 을 사용합니다.
XmlResolver를 지정하고, XmlReaderSettings.XmlResolver 속성을 설정하여 XmlReaderSettings 객체를 Create 메서드에 전달합니다.
리소스가 인증이 필요한 시스템에 저장된 경우 이 속성을 사용하여 XmlResolver.Credentials 필요한 자격 증명을 지정합니다.
인증 자격 증명 제공
읽을 XML 데이터가 포함된 파일에는 제한된 액세스 정책이 있을 수 있습니다. 네트워크 리소스에 액세스하는 데 인증이 필요한 경우 속성을 사용하여 Credentials 필요한 자격 증명을 지정합니다. 속성이 Credentials 설정되지 않은 경우 자격 증명은 .로 null설정됩니다.
예를 들어 인증을 위해 웹에서 데이터를 요청할 때 자격 증명이 필요하다고 가정합니다. 웹 가상 디렉터리에서 익명 액세스를 허용하지 않는 한 자격 증명을 Credentials 제공하려면 속성을 설정해야 합니다. 다음 예제에서는 기본 자격 증명을 사용하는 XmlReader로 XmlUrlResolver 개체를 만들어 http://localhost/bookstore/inventory.xml 사이트에 액세스합니다.
// 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)
다른 URI에 대해 다른 자격 증명을 제공하고 캐시에 추가할 수 있습니다. 이러한 자격 증명은 XML의 원래 원본에 관계없이 다른 URI에 대한 인증을 확인하는 데 사용됩니다. 다음 예제에서는 캐시에 자격 증명을 추가하는 방법을 보여줍니다.
// 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)
보안 고려 사항
클래스를 사용할 때 다음 항목을 고려합니다 XmlResolver .
XmlResolver 개체는 사용자 자격 증명과 같은 중요한 정보를 포함할 수 있습니다. 개체를 캐싱할 XmlResolver 때는 주의해야 하며 신뢰할 수 없는 구성 요소에 개체를 전달 XmlResolver 해서는 안 됩니다.
클래스를 사용하는 XmlResolver 클래스 속성을 디자인하는 경우 이 속성은 쓰기 전용 속성으로 정의되어야 합니다. 이 속성은 사용할 속성을 지정 XmlResolver 하는 데 사용할 수 있지만 개체를 반환 XmlResolver 하는 데 사용할 수는 없습니다.
애플리케이션이 신뢰할 수 없는 코드로부터 XmlResolver 개체를 허용하는 경우, GetEntity 메서드에 전달된 URI가 ResolveUri 메서드에서 반환된 URI와 동일하다고 가정할 수 없습니다. 기본 클래스에서 파생된 클래스들은 XmlResolver 메서드를 재정의할 수 있으며, 원래 URI와 다른 데이터를 반환할 수 있습니다.
애플리케이션은 읽은 바이트 수를 제한하는 GetEntity 구현을 통해 IStream 메서드에 대한 메모리 서비스 거부 위협을 완화할 수 있습니다. 이렇게 하면 악의적인 코드가 무한 바이트 스트림을 메서드에 전달하려고 하는 상황을 방지할 수 GetEntity 있습니다.
생성자
| Name | Description |
|---|---|
| XmlResolver() |
XmlResolver 클래스의 새 인스턴스를 초기화합니다. |
속성
| Name | Description |
|---|---|
| Credentials |
파생 클래스에서 재정의되는 경우 웹 요청을 인증하는 데 사용되는 자격 증명을 설정합니다. |
| FileSystemResolver |
파일 시스템 URI만 확인하는 XML 확인자를 가져옵니다. |
| ThrowingResolver |
엔터티 확인을 금지하는 XML 확인자를 가져옵니다. |
메서드
| Name | Description |
|---|---|
| Equals(Object) |
지정된 개체가 현재 개체와 같은지 여부를 확인합니다. (다음에서 상속됨 Object) |
| GetEntity(Uri, String, Type) |
파생 클래스에서 재정의되는 경우 실제 리소스가 포함된 개체에 URI를 매핑합니다. |
| GetEntityAsync(Uri, String, Type) |
URI를 실제 리소스가 포함된 개체에 비동기적으로 매핑합니다. |
| GetHashCode() |
기본 해시 함수로 사용됩니다. (다음에서 상속됨 Object) |
| GetType() |
현재 인스턴스의 Type 가져옵니다. (다음에서 상속됨 Object) |
| MemberwiseClone() |
현재 Object단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
| ResolveUri(Uri, String) |
파생 클래스에서 재정의되는 경우 기본 및 상대 URI에서 절대 URI를 확인합니다. |
| SupportsType(Uri, Type) |
확인자가 . 이외의 형식 Stream을 반환할 수 있도록 합니다. |
| ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |