CallbackBehaviorAttribute.ValidateMustUnderstand CallbackBehaviorAttribute.ValidateMustUnderstand CallbackBehaviorAttribute.ValidateMustUnderstand CallbackBehaviorAttribute.ValidateMustUnderstand Property

定義

システムまたはアプリケーションで SOAP MustUnderstand ヘッダー処理を強制的に行うかどうかを指定する値を取得または設定します。Gets or sets a value that specifies whether the system or the application enforces SOAP MustUnderstand header processing.

public:
 property bool ValidateMustUnderstand { bool get(); void set(bool value); };
public bool ValidateMustUnderstand { get; set; }
member this.ValidateMustUnderstand : bool with get, set
Public Property ValidateMustUnderstand As Boolean

プロパティ値

システムが SOAP ヘッダー true 処理を実行する場合は MustUnderstand、それ以外の場合は false、つまり、アプリケーションがこの処理を実行することを示します。true if the system is to perform SOAP header MustUnderstand processing; otherwise false, which indicates that the application performs this processing. 既定値は true です。The default value is true.

CallbackBehaviorAttribute オブジェクトを使用してマーシャリングするスレッドを決定するコールバック オブジェクトの SynchronizationContext、メッセージ検証を実施する ValidateMustUnderstand プロパティ、および例外を IncludeExceptionDetailInFaults オブジェクトとしてデバッグ用のサービスに返す FaultException プロパティのコード例を次に示します。The following code example shows a CallbackBehaviorAttribute on a callback object that uses the SynchronizationContext object to determine which thread to marshal to, the ValidateMustUnderstand property to enforce message validation, and the IncludeExceptionDetailInFaults property to return exceptions as FaultException objects to the service for debugging purposes.

using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Threading;

namespace Microsoft.WCF.Documentation
{
  [CallbackBehaviorAttribute(
   IncludeExceptionDetailInFaults= true, 
    UseSynchronizationContext=true,
    ValidateMustUnderstand=true
  )]
  public class Client : SampleDuplexHelloCallback
  {
    AutoResetEvent waitHandle;

    public Client()
    {
      waitHandle = new AutoResetEvent(false);
    }

    public void Run()
    {
      // Picks up configuration from the configuration file.
      SampleDuplexHelloClient wcfClient
        = new SampleDuplexHelloClient(new InstanceContext(this), "WSDualHttpBinding_SampleDuplexHello");
      try
      {
        Console.ForegroundColor = ConsoleColor.White;
        Console.WriteLine("Enter a greeting to send and press ENTER: ");
        Console.Write(">>> ");
        Console.ForegroundColor = ConsoleColor.Green;
        string greeting = Console.ReadLine();
        Console.ForegroundColor = ConsoleColor.White;
        Console.WriteLine("Called service with: \r\n\t" + greeting);
        wcfClient.Hello(greeting);
        Console.WriteLine("Execution passes service call and moves to the WaitHandle.");
        this.waitHandle.WaitOne();
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.WriteLine("Set was called.");
        Console.Write("Press ");
        Console.ForegroundColor = ConsoleColor.Red;
        Console.Write("ENTER");
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.Write(" to exit...");
        Console.ReadLine();
      }
      catch (TimeoutException timeProblem)
      {
        Console.WriteLine("The service operation timed out. " + timeProblem.Message);
        Console.ReadLine();
      }
      catch (CommunicationException commProblem)
      {
        Console.WriteLine("There was a communication problem. " + commProblem.Message);
        Console.ReadLine();
      }
    }
    public static void Main()
    {
      Client client = new Client();
      client.Run();
    }

    public void Reply(string response)
    {
      Console.WriteLine("Received output.");
      Console.WriteLine("\r\n\t" + response);
      this.waitHandle.Set();
    }
  }
}

Imports Microsoft.VisualBasic
Imports System
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports System.Threading

Namespace Microsoft.WCF.Documentation
  <CallbackBehaviorAttribute(IncludeExceptionDetailInFaults:= True, UseSynchronizationContext:=True, ValidateMustUnderstand:=True)> _
  Public Class Client
	  Implements SampleDuplexHelloCallback
	Private waitHandle As AutoResetEvent

	Public Sub New()
	  waitHandle = New AutoResetEvent(False)
	End Sub

	Public Sub Run()
	  ' Picks up configuration from the configuration file.
	  Dim wcfClient As New SampleDuplexHelloClient(New InstanceContext(Me), "WSDualHttpBinding_SampleDuplexHello")
	  Try
		Console.ForegroundColor = ConsoleColor.White
		Console.WriteLine("Enter a greeting to send and press ENTER: ")
		Console.Write(">>> ")
		Console.ForegroundColor = ConsoleColor.Green
		Dim greeting As String = Console.ReadLine()
		Console.ForegroundColor = ConsoleColor.White
		Console.WriteLine("Called service with: " & Constants.vbCrLf & Constants.vbTab & greeting)
		wcfClient.Hello(greeting)
		Console.WriteLine("Execution passes service call and moves to the WaitHandle.")
		Me.waitHandle.WaitOne()
		Console.ForegroundColor = ConsoleColor.Blue
		Console.WriteLine("Set was called.")
		Console.Write("Press ")
		Console.ForegroundColor = ConsoleColor.Red
		Console.Write("ENTER")
		Console.ForegroundColor = ConsoleColor.Blue
		Console.Write(" to exit...")
		Console.ReadLine()
	  Catch timeProblem As TimeoutException
		Console.WriteLine("The service operation timed out. " & timeProblem.Message)
		Console.ReadLine()
	  Catch commProblem As CommunicationException
		Console.WriteLine("There was a communication problem. " & commProblem.Message)
		Console.ReadLine()
	  End Try
	End Sub
	Public Shared Sub Main()
	  Dim client As New Client()
	  client.Run()
	End Sub

	Public Sub Reply(ByVal response As String) Implements SampleDuplexHelloCallback.Reply
	  Console.WriteLine("Received output.")
	  Console.WriteLine(Constants.vbCrLf & Constants.vbTab & response)
	  Me.waitHandle.Set()
	End Sub
  End Class
End Namespace

注釈

ValidateMustUnderstand プロパティを使用して、到達したメッセージ ヘッダーの検証の実施をオフにします。Use the ValidateMustUnderstand property to turn off the enforced validation of arriving message headers. 通常の実行では、メッセージ ヘッダーを UnderstoodHeaders プロパティと比較し、到着したヘッダーがコールバック オブジェクトのランタイムによって明示的に処理されることを確認します。In normal execution, message headers are compared against the UnderstoodHeaders property to confirm that arriving headers are explicitly handled by the callback object runtime. この確認を無効にするには、このプロパティを false に設定します。Set this to false to disable this checking. false に設定すると、アプリケーションは、MustUnderstand="true" とマークされたヘッダーがないか確認し、1 つ以上のヘッダーが理解されなかった場合は、エラーを返す必要があります。When set to false, the application must check for headers marked with MustUnderstand="true" and return a fault if one or more of them were not understood. これは、コールバックが受信 SOAP メッセージをすべて受け入れ (型指定のあるメッセージとないメッセージを使用する場合など)、カスタム ヘッダー処理を行うことになっている場合に便利です。This is useful when the callback is supposed to accept any incoming SOAP messages (for example, when using typed or untyped messages) and perform custom header processing.

適用対象