XmlUrlResolver 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
URI(Uniform Resource Identifier)로 명명된 외부 XML 리소스를 확인합니다.
public ref class XmlUrlResolver : System::Xml::XmlResolver
public class XmlUrlResolver : System.Xml.XmlResolver
type XmlUrlResolver = class
inherit XmlResolver
Public Class XmlUrlResolver
Inherits XmlResolver
- 상속
예제
다음 예제에서는 기본 자격 증명을 XmlUrlResolver 사용하는 항목을 만듭니다XmlReader.
// Create an XmlUrlResolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = CredentialCache.DefaultCredentials;
// Create the reader.
XmlReaderSettings settings = new XmlReaderSettings();
settings.XmlResolver = resolver;
XmlReader reader =
XmlReader.Create("http://serverName/data/books.xml", settings);
' Create an XmlUrlResolver with default credentials.
Dim resolver As New XmlUrlResolver()
resolver.Credentials = CredentialCache.DefaultCredentials
' Create the reader.
Dim settings As New XmlReaderSettings()
settings.XmlResolver = resolver
Dim reader As XmlReader = _
XmlReader.Create("http://serverName/data/books.xml", settings)
설명
XmlUrlResolver 는 엔터티, DTD(문서 형식 정의) 또는 스키마와 같은 외부 XML 리소스를 확인하는 데 사용됩니다. XSL(Extensible StyleSheet Language) 스타일시트 또는 XSD(XML 스키마 정의 언어) 스키마에 있는 요소를 포함하고 가져오는 데도 사용됩니다.
XmlUrlResolver 는 네임스페이스의 모든 클래스에 대한 기본 확인자입니다 System.Xml . 클래스의 file://
프로토콜 및 http://
요청을 지원합니다 WebRequest .
중요
XmlUrlResolver 개체에는 사용자 자격 증명과 같은 중요한 정보가 포함될 수 있습니다. 개체를 캐시 XmlUrlResolver 하고 신뢰할 수 없는 구성 요소에 개체를 전달 XmlUrlResolver 하지 않아야 하는 경우 주의해야 합니다.
DTD 해결
XML 판독기(XmlReader)가 외부 DTD가 포함된 XML 파일을 읽는 경우 메서드를 호출 XmlUrlResolver.GetEntityAsync 하여 DTD의 스트림 표현을 가져옵니다. DTD의 URI가 상대 URI인 경우 XML 판독기는 메서드를 XmlUrlResolver.ResolveUri 호출하고 지정된 relativeUri
매개 변수와 baseURi
매개 변수에 대한 절대 URI를 반환합니다. URI를 XmlUrlResolver 확인하는 방법을 모르는 경우 반환됩니다 null
.
메서드는 XmlUrlResolver.GetEntity 리소스에 대한 액세스 권한을 얻기 위해 속성의 Credentials 정보를 적절하게 사용합니다. 보안상의 이유로 이 속성에 대한 접근자가 없습니다 get
. 덮어쓸 XmlResolver때 GetEntity 는 자격 증명 속성의 자격 증명 정보를 활용하는 메서드입니다.
다른 모든 XML 리소스를 확인하는 것은 DTD를 확인하는 것과 매우 유사합니다. XmlResolver 는 외부 리소스와의 연결을 협상하고 콘텐츠의 표현을 Stream 반환합니다. 스트림을 해석하기 위해 호출하는 XmlResolver 개체입니다.
XmlUrlResolver 클래스 확장
클래스의 XmlUrlResolver 기본 동작은 캐시가 아닌 원본에서 XML 데이터 리소스를 확인하는 것입니다. 경우에 따라 캐시에서 데이터 리소스를 확인하면 데이터 리소스의 서버로 이동하는 시간이 절약되므로 애플리케이션 성능이 향상될 수 있습니다. 여기서 성능 향상은 최신 콘텐츠의 필요성과 비교할 수 있어야 합니다.
다음 예제에서는 캐시에서 리소스를 검색하기 위해 새 클래스XmlCachingResolver
를 확장하고 XmlUrlResolver 빌드합니다. 이 작업은 속성 및 메서드를 재정의 XmlUrlResolver.Credentials 하여 수행됩니다 XmlUrlResolver.GetEntity .
class XmlCachingResolver : XmlUrlResolver
{
bool enableHttpCaching;
ICredentials credentials;
//resolve resources from cache (if possible) when enableHttpCaching is set to true
//resolve resources from source when enableHttpcaching is set to false
public XmlCachingResolver(bool enableHttpCaching)
{
this.enableHttpCaching = enableHttpCaching;
}
public override ICredentials Credentials
{
set
{
credentials = value;
base.Credentials = value;
}
}
public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)
{
if (absoluteUri == null)
{
throw new ArgumentNullException("absoluteUri");
}
//resolve resources from cache (if possible)
if (absoluteUri.Scheme == "http" && enableHttpCaching && (ofObjectToReturn == null || ofObjectToReturn == typeof(Stream)))
{
WebRequest webReq = WebRequest.Create(absoluteUri);
webReq.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default);
if (credentials != null)
{
webReq.Credentials = credentials;
}
WebResponse resp = webReq.GetResponse();
return resp.GetResponseStream();
}
//otherwise use the default behavior of the XmlUrlResolver class (resolve resources from source)
else
{
return base.GetEntity(absoluteUri, role, ofObjectToReturn);
}
}
}
Class XmlCachingResolver
Inherits XmlUrlResolver
Dim enableHttpCaching As Boolean
Public Shadows Credentials As ICredentials
'resolve resources from cache (if possible) when enableHttpCaching is set to true
'resolve resources from source when enableHttpcaching is set to false
Public Sub New(ByVal enableHttpCaching As Boolean)
Me.enableHttpCaching = enableHttpCaching
End Sub
Public Shadows Function GetEntity(ByVal absoluteUri As Uri, ByVal role As String, ByVal returnType As Type) As Object
If absoluteUri = Nothing Then
Throw New ArgumentNullException("absoluteUri")
End If
'resolve resources from cache (if possible)
If absoluteUri.Scheme = "http" And enableHttpCaching And (returnType Is GetType(Nullable) Or returnType Is GetType(Stream)) Then
Dim webReq As WebRequest = WebRequest.Create(absoluteUri)
webReq.CachePolicy = New HttpRequestCachePolicy(HttpRequestCacheLevel.Default)
If Not (Credentials Is Nothing) Then
webReq.Credentials = Credentials
End If
Dim resp As WebResponse = webReq.GetResponse()
Return resp.GetResponseStream()
'otherwise use the default behavior of the XmlUrlResolver class (resolve resources from source)
Else
Return MyBase.GetEntity(absoluteUri, role, returnType)
End If
End Function
End Class
클래스의 XmlCachingResolver
캐싱 동작은 메서드에서 GetEntity
구현됩니다. 이 작업은 새 WebRequest 개체와 HttpRequestCachePolicy 개체를 만들어 수행합니다. 개체는 HttpRequestCachePolicy 열거형의 멤버를 Default HttpRequestCacheLevel 사용하여 만들어집니다.
CachePolicy 개체의 WebRequest 속성이 개체와 함께 설정됩니다HttpRequestCachePolicy.
클래스의 인스턴스가 .을 XmlCachingResolver
Boolean
enableHttpCaching
사용하여 만들어집니다. 이 값이 설정 true
되면 인스턴스는 가능한 경우 기본 캐시에서 리소스를 확인합니다. 설정false
되면 enableHttpCaching
인스턴스는 기본 동작을 사용하고 원본에서 리소스를 확인합니다.
참고
이 예제에서는 .NET Framework XML 클래스의 확장성을 활용합니다. 특정 애플리케이션의 필요성을 만족시키기 위해 다른 클래스를 확장하고 사용자 지정할 수도 있습니다.
생성자
XmlUrlResolver() |
XmlUrlResolver 클래스의 새 인스턴스를 초기화합니다. |
속성
CachePolicy |
내부 WebRequest 개체에 대한 캐시 정책을 가져오거나 설정합니다. |
Credentials |
웹 요청을 인증하는 데 사용된 자격 증명을 설정합니다. |
Proxy |
기본 WebRequest 개체에 대한 캐시 정책을 가져오거나 설정합니다. |
메서드
Equals(Object) |
지정된 개체가 현재 개체와 같은지 확인합니다. (다음에서 상속됨 Object) |
GetEntity(Uri, String, Type) |
실제 리소스가 포함된 개체로 URI를 매핑합니다. |
GetEntityAsync(Uri, String, Type) |
실제 리소스가 포함된 개체로 URI를 비동기적으로 매핑합니다. |
GetEntityAsync(Uri, String, Type) |
실제 리소스가 포함된 개체로 URI를 비동기적으로 매핑합니다. (다음에서 상속됨 XmlResolver) |
GetHashCode() |
기본 해시 함수로 작동합니다. (다음에서 상속됨 Object) |
GetType() |
현재 인스턴스의 Type을 가져옵니다. (다음에서 상속됨 Object) |
MemberwiseClone() |
현재 Object의 단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
ResolveUri(Uri, String) |
기본 및 상대 URI에서 절대 URI를 확인합니다. |
ResolveUri(Uri, String) |
파생 클래스에서 재정의되면 기본 URI 및 상대 URI에서 절대 URI를 확인합니다. (다음에서 상속됨 XmlResolver) |
SupportsType(Uri, Type) |
Stream이 아닌 유형을 반환하기 위해 확인자를 사용합니다. (다음에서 상속됨 XmlResolver) |
ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |