次の方法で共有


方法 : 不明な SOAP ヘッダーを処理する

このトピックの対象は、レガシ テクノロジに特定されています。XML Web サービスと XML Web サービス クライアントは以下を使用して作成してください。 Windows Communication Foundation.

Web サービスが予期していたが明示的には定義されていない可能性のある SOAP ヘッダーを持つ SOAP 要求が、Web サービス クライアントから Web サービス メソッドに送信されることがあります。この場合、SOAP ヘッダーのセマンティクスが認識および処理されるかどうかを確認することが重要です。SOAP 仕様では、SOAP ヘッダーの mustUnderstand 属性が true に設定されている場合に例外がスローされることが規定されているためです。クライアントによって要求される SOAP ヘッダーの処理の詳細については、「方法 : XML Web サービス クライアントによって要求される SOAP ヘッダーを処理する」を参照してください。

Web サービス クライアントからの不明な SOAP ヘッダーを処理するには

  1. 複数の不明な SOAP ヘッダーを処理するために、SoapUnknownHeader または SoapHeader の型、あるいはどちらかの配列を使用して、Web サービスを実装するクラスにメンバー変数を追加します。

    型を SoapUnknownHeader の配列または単一インスタンスとして宣言すると、SoapUnknownHeader には Element プロパティがあるということが利点です。Element プロパティは、XmlElement 型であり、SOAP 要求または SOAP 応答の Header 要素の XML ドキュメントを表します。したがって、Web サービス メソッドは、Element プロパティを調べることで、SOAP ヘッダーの名前と、SOAP ヘッダーによって渡されたデータを確認できます。

    public class MyWebService {
        public SoapUnknownHeader[] unknownHeaders;
    
    Public Class MyWebService
        Public unknownHeaders() As SoapUnknownHeader
    
  2. 不明な各 SOAP ヘッダーを処理する各 Web サービス メソッドに SoapHeader 属性を適用します。

    
        [WebMethod]
        [SoapHeader("unknownHeaders")]
        public string MyWebMethod()
    
        <WebMethod, _
         SoapHeader("unknownHeaders") > _
        Public Function MyWebMethod() As String
    
    
  3. 不明な SOAP ヘッダーを処理できるようにするかどうかを決定するコードを追加します。

    メンバー変数の型が SoapUnknownHeader である場合、Web サービス メソッドは、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 に設定します。

    Web サービス メソッドが不明な SOAP ヘッダーを処理する場合に、DidUnderstand プロパティを true に設定しなかったときは、SoapHeaderException がスローされます。詳細については、「方法 : XML Web サービス クライアントによって要求される 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
    
    hf2y839a.note(ja-jp,VS.100).gif注 :
    ASP.NET を使用して作成した Web サービスでは、Web サービス メソッドとの通信で DidUnderstand プロパティが使用されます。このプロパティは SOAP 仕様の一部ではなく、その値は SOAP 要求または SOAP 応答には含まれません。

    hf2y839a.note(ja-jp,VS.100).gif注 :
    Web サービス クライアントが Web サービス記述言語ツール (Wsdl.exe) を使用してプロキシ クラスを構築し、Web サービスが SOAP ヘッダーを表すメンバー変数を SoapUnknownHeader 型を使用して定義している場合、その SOAP ヘッダーへの参照はプロキシ クラスには追加されません。Web サービス クライアントがその SOAP ヘッダーを SOAP 要求に追加する場合は、メンバー変数を追加し、適切な Web サービス メソッドを呼び出すメソッドに SoapHeader 属性を適用して、プロキシ クラスを変更する必要があります。

参照

リファレンス

SoapHeader
SoapHeaderAttribute
SoapUnknownHeader
SoapHeaderException

概念

XML Web サービス クライアントの作成

その他のリソース

SOAP ヘッダーの使用
ASP.NET を使用した XML Web サービス