Share via


XmlResolver 클래스

이 문서에서는 이 API에 대한 참조 설명서에 대한 추가 설명서를 제공합니다.

XmlResolver 형식은 엔터티, DTD(문서 형식 정의) 또는 스키마와 같은 외부 XML 리소스를 확인하는 데 사용됩니다. XSL(Extensible Stylesheet Language) 스타일시트 또는 XSD(XML 스키마 정의 언어) 스키마에 있는 요소를 포함하고 가져오는 데도 사용됩니다.

XmlResolver 는 보안 자격 증명 처리, 데이터 원본에 대한 연결 열기, 스트림 또는 다른 개체 형식의 형식으로 리소스 반환 등 리소스에 대한 연결 협상의 모든 측면을 처리합니다. 호출 XmlResolver 하는 개체에는 스트림을 해석하는 작업이 있습니다.

네임스페이스에는 System.Xml 클래스의 두 가지 구체적인 구현이 XmlResolver 포함됩니다.

  • XmlUrlResolver 는 네임스페이스의 모든 클래스에 대한 기본 확인자입니다 System.Xml . 클래스의 file:// 프로토콜 및 http:// 요청을 지원합니다 System.Net.WebRequest . 성능을 향상시키기 위해 클래스를 확장하는 예제는 참조 페이지를 참조 XmlUrlResolver 하세요.

  • XmlSecureResolver 는 개체를 래핑하고 액세스할 수 있는 리소스를 제한하여 다른 XmlResolver 개체를 보호하는 데 도움이 됩니다. 예를 들어 XmlSecureResolver 특정 인터넷 사이트 또는 영역에 대한 액세스를 금지할 수 있습니다.

고유한 확인자를 만들고 지정할 수 있습니다. 확인자를 지정하지 않으면 판독기는 사용자 자격 증명 없이 기본값 XmlUrlResolver 을 사용합니다.

속성을 설정하고 개체를 메서드에 XmlReaderSettings.XmlResolver 전달 XmlReaderSettings 하여 사용할 개체를 Create 지정 XmlResolver 합니다.

리소스가 인증이 필요한 시스템에 저장된 경우 이 속성을 사용하여 XmlResolver.Credentials 필요한 자격 증명을 지정합니다.

인증 자격 증명 제공

읽을 XML 데이터가 포함된 파일에는 제한된 액세스 정책이 있을 수 있습니다. 네트워크 리소스에 액세스하는 데 인증이 필요한 경우 속성을 사용하여 Credentials 필요한 자격 증명을 지정합니다. 속성이 Credentials 설정되지 않은 경우 자격 증명은 .로 null설정됩니다.

예를 들어 인증을 위해 웹에서 데이터를 요청할 때 자격 증명이 필요하다고 가정합니다. 웹 가상 디렉터리에서 익명 액세스를 허용하지 않는 한 자격 증명을 Credentials 제공하려면 속성을 설정해야 합니다. 다음 예제에서는 기본 자격 증명을 XmlUrlResolver 사용하여 사이트에 액세스하는 개체를 http://localhost/bookstore/inventory.xml 만듭니다XmlReader.

// 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 신뢰할 수 없는 코드에서 개체를 가정할 수는 없습니다에 전달 된 URI는 GetEntity 메서드를 사용 됩니다 반환한 것과 동일 합니다 ResolveUri 메서드. 클래스에서 파생된 클래스는 메서드를 재정의 XmlResolverGetEntity 하고 원래 URI에 포함된 것과 다른 데이터를 반환할 수 있습니다.

  • 애플리케이션 메모리에 대 한 서비스 거부를 완화할 수는 GetEntity 메서드를 구현 하 여는 IStream 읽은 바이트 수를 제한 합니다. 이렇게 하면 악의적인 코드가 무한 바이트 스트림을 메서드에 전달하려고 하는 상황을 방지할 수 GetEntity 있습니다.