방법: 알 수 없는 SOAP 헤더 처리
웹 서비스 클라이언트는 웹 서비스에 필요했지만 명시적으로 정의되지 않은 웹 서비스 메서드에 SOAP 헤더를 포함하는 SOAP 요청을 보낼 수 있습니다. SOAP 사양에 따르면 SOAP 헤더에 mustUnderstand 특성이 true로 설정되어 있을 경우 예외가 throw되기 때문에 이 경우 SOAP 헤더의 의미를 인식하고 처리할지 여부를 결정해야 합니다. 클라이언트에 필요한 SOAP 헤더 처리에 대한 자세한 내용은 XML Web Services 클라이언트에 필요한 SOAP 헤더 처리를 참조하십시오.
웹 서비스 클라이언트에서 알 수 없는 SOAP 헤더를 처리하려면
여러 개의 알 수 없는 SOAP 헤더를 처리하려면 형식이 SoapUnknownHeader, SoapHeader 또는 둘의 배열인 웹 서비스를 구현하는 클래스에 멤버 변수를 추가합니다.
형식을 SoapUnknownHeader의 단일 인스턴스나 배열로 선언하면 SoapUnknownHeader에 Element 속성이 포함된다는 한 가지 이점이 있습니다. Element 속성은 XmlElement 형식으로서, SOAP 요청 또는 SOAP 응답의 Header 요소에 대한 XML 문서를 나타냅니다. 따라서 웹 서비스 메서드는 Element 속성을 조회하여 SOAP 헤더에서 전달한 데이터와 함께 SOAP 헤더의 이름을 확인할 수 있습니다.
public class MyWebService { public SoapUnknownHeader[] unknownHeaders;
Public Class MyWebService Public unknownHeaders() As SoapUnknownHeader
알 수 없는 각각의 SOAP 헤더를 처리하려면 각 웹 서비스 메서드에 SoapHeader 특성을 적용합니다.
[WebMethod] [SoapHeader("unknownHeaders")] public string MyWebMethod()
<WebMethod, _ SoapHeader("unknownHeaders") > _ Public Function MyWebMethod() As String
알 수 없는 SOAP 헤더를 처리할 수 있는지 여부를 결정하는 코드를 추가합니다.
멤버 변수의 형식이 SoapUnknownHeader인 경우 웹 서비스 메서드는 Element 속성을 조회하여 SOAP 헤더에서 전달된 데이터와 함께 SOAP 헤더의 이름을 확인할 수 있습니다. Element 속성의 Name 속성은 SOAP 헤더의 이름을 식별합니다.
foreach (SoapUnknownHeader header in unknownHeaders) { // Check to see if this a known header. if (header.Element.Name == "MyKnownHeader")
Dim header As SoapUnknownHeader For Each header In unknownHeaders ' Check to see if this is a known header. If (header.Element.Name = "MyKnownHeader") Then
특정 SOAP 헤더를 처리하는 방법이 알려져 있는 경우, 알 수 없는 SOAP 헤더를 나타내는 멤버 변수의 DidUnderstand 속성을 true로 설정합니다.
웹 서비스 메서드에서 알 수 없는 SOAP 헤더를 처리하지만 DidUnderstand 속성이 true로 설정되어 있지 않은 경우 SoapHeaderException이 throw될 수 있습니다. 자세한 내용은 XML Web Services 클라이언트에 필요한 SOAP 헤더 처리를 참조하십시오.
// Check to see if this is a known header. if (header.Element.Name == "MyKnownHeader") header.DidUnderstand = true; else // For those headers that cannot be // processed, set DidUnderstand to false. header.DidUnderstand = false; }
' Check to see if this a known header. If (header.Element.Name = "MyKnownHeader") Then header.DidUnderstand = True Else ' For those headers that cannot be ' processed, set DidUnderstand to false. header.DidUnderstand = False End If
참고: DidUnderstand 속성은 ASP.NET에서 만든 웹 서비스에서 웹 서비스 메서드와 통신하는 데 사용됩니다. 이 속성은 SOAP 사양에 속하지 않으며, 속성 값은 SOAP 요청 또는 SOAP 응답에 표시되지 않습니다.
참고: 웹 서비스 클라이언트가 웹 서비스 기술 언어 도구(Wsdl.exe)를 사용하여 프록시 클래스를 빌드하고, 웹 서비스가 SoapUnknownHeader 형식을 사용하여 SOAP 헤더를 나타내는 멤버 변수를 정의하는 경우 해당 SOAP 헤더에 대한 참조가 프록시 클래스에 추가되지 않습니다. 웹 서비스 클라이언트에서 SOAP 헤더 또는 SOAP 요청에 추가하려면 멤버 변수를 추가하고 해당 웹 서비스 메서드를 호출하는 메서드에 SoapHeader 특성을 적용하여 프록시 클래스를 수정해야 합니다.
참고 항목
참조
SoapHeader
SoapHeaderAttribute
SoapUnknownHeader
SoapHeaderException
개념
기타 리소스
SOAP 헤더 사용
ASP.NET을 사용하는 XML Web services
Copyright © 2007 by Microsoft Corporation. All rights reserved.