다음을 통해 공유


방법: 알 수 없는 SOAP 헤더 처리

웹 서비스 클라이언트는 웹 서비스에 필요했지만 명시적으로 정의되지 않은 웹 서비스 메서드에 SOAP 헤더를 포함하는 SOAP 요청을 보낼 수 있습니다. SOAP 사양에 따르면 SOAP 헤더에 mustUnderstand 특성이 true로 설정되어 있을 경우 예외가 throw되기 때문에 이 경우 SOAP 헤더의 의미를 인식하고 처리할지 여부를 결정해야 합니다. 클라이언트에 필요한 SOAP 헤더 처리에 대한 자세한 내용은 XML Web Services 클라이언트에 필요한 SOAP 헤더 처리를 참조하십시오.

웹 서비스 클라이언트에서 알 수 없는 SOAP 헤더를 처리하려면

  1. 여러 개의 알 수 없는 SOAP 헤더를 처리하려면 형식이 SoapUnknownHeader, SoapHeader 또는 둘의 배열인 웹 서비스를 구현하는 클래스에 멤버 변수를 추가합니다.

    형식을 SoapUnknownHeader의 단일 인스턴스나 배열로 선언하면 SoapUnknownHeaderElement 속성이 포함된다는 한 가지 이점이 있습니다. Element 속성은 XmlElement 형식으로서, SOAP 요청 또는 SOAP 응답의 Header 요소에 대한 XML 문서를 나타냅니다. 따라서 웹 서비스 메서드는 Element 속성을 조회하여 SOAP 헤더에서 전달한 데이터와 함께 SOAP 헤더의 이름을 확인할 수 있습니다.

    public class MyWebService {
        public SoapUnknownHeader[] unknownHeaders;
    
    Public Class MyWebService
        Public unknownHeaders() As SoapUnknownHeader
    
  2. 알 수 없는 각각의 SOAP 헤더를 처리하려면 각 웹 서비스 메서드에 SoapHeader 특성을 적용합니다.

    
        [WebMethod]
        [SoapHeader("unknownHeaders")]
        public string MyWebMethod()
    
        <WebMethod, _
         SoapHeader("unknownHeaders") > _
        Public Function MyWebMethod() As String
    
    
  3. 알 수 없는 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
    
  4. 특정 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
    
    Note참고:

    DidUnderstand 속성은 ASP.NET에서 만든 웹 서비스에서 웹 서비스 메서드와 통신하는 데 사용됩니다. 이 속성은 SOAP 사양에 속하지 않으며, 속성 값은 SOAP 요청 또는 SOAP 응답에 표시되지 않습니다.

    Note참고:

    웹 서비스 클라이언트가 웹 서비스 기술 언어 도구(Wsdl.exe)를 사용하여 프록시 클래스를 빌드하고, 웹 서비스가 SoapUnknownHeader 형식을 사용하여 SOAP 헤더를 나타내는 멤버 변수를 정의하는 경우 해당 SOAP 헤더에 대한 참조가 프록시 클래스에 추가되지 않습니다. 웹 서비스 클라이언트에서 SOAP 헤더 또는 SOAP 요청에 추가하려면 멤버 변수를 추가하고 해당 웹 서비스 메서드를 호출하는 메서드에 SoapHeader 특성을 적용하여 프록시 클래스를 수정해야 합니다.

참고 항목

참조

SoapHeader
SoapHeaderAttribute
SoapUnknownHeader
SoapHeaderException

개념

XML Web services 클라이언트 빌드

기타 리소스

SOAP 헤더 사용
ASP.NET을 사용하는 XML Web services

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.