クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
.NET 開発
.NET Framework 3.5
.NET Framework 3.5

  低帯域幅での表示をオンにする
このページは次のバージョンについて記述しています。
Microsoft Visual Studio 2008/.NET Framework 3.5

その他のバージョンについては、以下の情報を参照してください。
.NET Framework クラス ライブラリ
IContractBehavior インターフェイス

更新 : 2007 年 11 月

サービスまたはクライアント アプリケーションでコントラクトのランタイム動作を拡張するために使用できるメソッドを実装します。

名前空間 :  System.ServiceModel.Description
アセンブリ :  System.ServiceModel (System.ServiceModel.dll 内)
Visual Basic (宣言)
Public Interface IContractBehavior
Visual Basic (使用法)
Dim instance As IContractBehavior
C#
public interface IContractBehavior
Visual C++
public interface class IContractBehavior
J#
public interface IContractBehavior
JScript
public interface IContractBehavior

コントラクト全体にわたる実行の一部の側面を、アプリケーション レベルで変更、確認、または拡張するには、IContractBehavior インターフェイスを実装します。IContractBehavior オブジェクトは、IServiceBehavior オブジェクトおよび IEndpointBehavior オブジェクトとは異なり、アプリケーション構成ファイルを使用してランタイムに追加することはできません。プログラムによって、または属性を使用することによってのみ追加できます。

サービス、エンドポイント、およびコントラクトの動作の選択の詳細については、「動作を使用したランタイムの構成と拡張」を参照してください。

  • AddBindingParameters メソッドを使用して、動作をサポートするためのカスタム データをバインディング要素に提供します。

  • ApplyClientBehavior メソッドを使用して、クライアント アプリケーションでコントラクトを変更または確認したり、コントラクトに拡張機能を挿入したりできます。

  • ApplyDispatchBehavior メソッドを使用して、サービス アプリケーションでコントラクトを変更または確認したり、コントラクトに拡張機能を挿入したりできます。

  • Validate メソッドを使用して、コントラクトが特定の機能をサポートしていることを確認します。

IContractBehavior オブジェクトは、これらのメソッドをどれでも使用できますが、通常は、重要なメソッドは 1 つだけです。この場合、使用されないメソッドは、値なしで戻ることができます。

ms599096.alert_note(ja-jp,VS.90).gifメモ :

すべての IContractBehavior メソッドは System.ServiceModel.Description..::.ContractDescription および System.ServiceModel.Description..::.ServiceEndpoint をパラメータとして渡します。これらのパラメータは、検査に使用されます。これらのオブジェクトを変更した場合、実行の動作は未定義になります。

IContractBehavior 型は、サービス、クライアント、またはその両方で使用できます。サービスでカスタマイズ タスクを実行するには、ICommunicationObject..::.Open メソッドが System.ServiceModel..::.ServiceHost オブジェクトで呼び出されるときに行われるサービス ランタイムの構築の前に、IContractBehavior オブジェクトを Behaviors プロパティに追加しておく必要があります。これには、2 つの方法があります。

1 つは、ICommunicationObject..::.Open メソッドが System.ServiceModel..::.ServiceHost オブジェクトで呼び出される前に、プログラムを使用して、Behaviors プロパティにコントラクトのカスタム動作を追加する方法です。この場合、動作は、エンドポイント上でそのコントラクトを使用して送信されるすべてのメッセージに適用されます。

ms599096.alert_note(ja-jp,VS.90).gifメモ :

動作は、同じ種類のすべてのコントラクトに適用されます。たとえば、プログラムを使用して同じ種類のコントラクトを複数のエンドポイントに追加した場合、同じコントラクト オブジェクトを参照するすべてのエンドポイントで動作が変更されます。

もう 1 つは、IContractBehavior を実装するカスタム属性を作成し、それを次のものに適用する方法です。

  • コントラクト インターフェイス。この場合、動作は任意のエンドポイント内の該当の型のすべてのコントラクトに適用されます。

  • サービス クラス。この場合、動作はコントラクトとは関係なくすべてのエンドポイントに適用されます。

  • コールバック クラス。この場合、動作は双方向クライアントのエンドポイントに適用されます。

カスタム属性が System.ServiceModel.Description..::.IContractBehaviorAttribute を同時に実装している場合、2 番目の方法の動作は少し異なります。この場合、動作は次のようになります。

  • コントラクト インターフェイス。この場合、動作は任意のエンドポイント内の該当の型のすべてのコントラクトに適用されます。Windows Communication Foundation (WCF) は、IContractBehaviorAttribute..::.TargetContract プロパティの値を無視します。

  • サービス クラス。この場合、動作はコントラクトが IContractBehaviorAttribute..::.TargetContract プロパティの値であるエンドポイントにのみ適用されます。

  • コールバック クラス。この場合、動作は双方向クライアントのエンドポイントに適用されます。WCF は、IContractBehaviorAttribute..::.TargetContract プロパティの値を無視します。

想定されているカスタマイズ タスクをクライアントで実行するには、ChannelFactory<(Of <(TChannel>)>)..::.CreateChannel が呼び出されるときに行われるクライアント ランタイムの構築の前に、IContractBehavior オブジェクトを Behaviors プロパティに追加しておく必要があります。これには、2 つの方法があります。

プログラムを使用してクライアントまたはサービス アプリケーションに IContractBehavior 型を追加する方法の詳細については、「動作を使用したランタイムの構成と拡張」を参照してください。

次のコード例は、カスタムの IInstanceProvider 実装が "シングルトン" 動作を提供する ObjectProviderBehavior を呼び出したことを前提としています。これは、常に同じサービス インスタンスを返し、リサイクルはしません。

インスタンス プロバイダのカスタマイズを挿入するために、例では、IContractBehavior を実装するカスタム属性 (SingletonBehaviorAttribute) を実装してカスタム サービス インスタンス プロバイダを挿入する方法を示しています。また、IContractBehaviorAttribute も実装します。これは、その使用を ISampleService コントラクトにバインドします。

C#
public class SingletonBehaviorAttribute : Attribute, IContractBehaviorAttribute, IContractBehavior
{

  #region IContractBehaviorAttribute Members

  public Type TargetContract
  {
    get { return typeof(ISampleService); }
  }

  #endregion

  #region IContractBehavior Members

  public void AddBindingParameters(ContractDescription description, ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection parameters)
  {
    return;
  }

  public void ApplyClientBehavior(ContractDescription description, ServiceEndpoint endpoint, ClientRuntime clientRuntime)
  {
    return;
  }

  public void ApplyDispatchBehavior(ContractDescription description, ServiceEndpoint endpoint, DispatchRuntime dispatch)
  {
    dispatch.InstanceProvider = new ObjectProviderBehavior("Custom ObjectProviderBehavior constructor.");
  }

  public void Validate(ContractDescription description, ServiceEndpoint endpoint)
  {
    return;
  }

  #endregion
}

Windows Vista, Windows XP SP2, Windows Server 2003

.NET Framework および .NET Compact Framework では、各プラットフォームのすべてのバージョンはサポートしていません。サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

.NET Framework

サポート対象 : 3.5、3.0
コミュニティ コンテンツ   コミュニティ コンテンツとは
新しいコンテンツの追加 RSS  注釈
Processing
© 2009 Microsoft Corporation. All rights reserved. 使用条件  |  商標  |  プライバシー
Page view tracker