エクスポート (0) 印刷
すべて展開
この記事は機械翻訳されたものです。 記事の文章にポインターを重ねると、原文のテキストが表示されます。 詳細情報
訳文
原文

IPolicyImportExtension インターフェイス

バインディングに関するカスタム ポリシー アサーションをインポートするオブジェクトのメソッドを定義します。

名前空間:  System.ServiceModel.Description
アセンブリ:  System.ServiceModel (System.ServiceModel.dll 内)

public interface IPolicyImportExtension

IPolicyImportExtension 型で公開されるメンバーは以下のとおりです。

  名前説明
パブリック メソッドImportPolicyカスタム ポリシー アサーションをインポートして実装するバインディング要素を追加できるメソッドを定義します。
このページのトップへ

特定のエンドポイントによって公開されている WSDL 情報でエンドポイントの機能または要件に関するカスタム ポリシー アサーションを検索するには、IPolicyImportExtension インターフェイスを実装します。 通常、ポリシー インポーターは特定のアサーションを検索し、そのアサーションの要件をサポートするバインディング要素を挿入または構成したり、そのアサーションの要件をサポートするコントラクトを変更したりします。

対応する IPolicyExportExtension とは異なり、IPolicyImportExtension は、BindingElement オブジェクトによる実装を必要としません。「使用例」で示されているクライアント構成セクションを使用するか、またはプログラムで System.ServiceModel.Description.WsdlImporter コンストラクターに追加することによって読み込むことができます。

Windows Communication Foundation (WCF) は、2 つのオブジェクト (MetadataImporter および PolicyConversionContext) を ImportPolicy メソッドに渡します。 通常、PolicyConversionContext オブジェクトには既に各バインディング スコープのポリシー アサーションが含まれています。

IPolicyImportExtension 実装は、次の手順を実行します。

  1. 機能させるカスタム ポリシー アサーションを検索します。このためには、スコープに応じて、GetBindingAssertionsGetMessageBindingAssertionsGetOperationBindingAssertions のいずれかのメソッドを呼び出します。

  2. アサーション コレクションからポリシー アサーションを削除します。 PolicyAssertionCollection.Remove メソッドは、一度にアサーションを検索し、返し、削除します。

  3. バインディング スタックまたはコントラクトを変更します。このためには、必要なカスタム BindingElementBindingElements プロパティに追加するか、PolicyConversionContext.Contract プロパティを変更します。

手順 2. は重要です。 すべてのポリシー インポーターが呼び出された後、WCF は、残っているポリシー アサーションがあるかをチェックします。 アサーションが存在する場合、WCF は、ポリシーのインポートが失敗して関連付けられているバインディングがインポートされていないと見なします。

重要 : 重要

悪意のあるメタデータ提供者が、ポリシー インポーターを悪用する目的で、不正な XML をメタデータの一部として送信しようとする可能性があります。 カスタム ポリシー インポーターは、渡される可能性のあるすべての形式の XML に対して強固にすることをお勧めします。

MetadataImporter のカスタム実装は、それら独自の PolicyConversionContext オブジェクトを実装してカスタム メタデータ形式に結び付けられているポリシー アサーションを抽出する必要があります。

ポリシー アサーションではないカスタム WSDL 要素をエクスポートおよびインポートする場合については、System.ServiceModel.Description.IWsdlExportExtension および System.ServiceModel.Description.IWsdlImportExtension を参照してください。

メモメモ

カスタム ポリシー インポーターとカスタム ポリシー エクスポーターは、構成ファイル内の同じ構成要素と /svcutilConfig:<configFile> オプションを使用することにより、ServiceModel メタデータ ユーティリティ ツール (Svcutil.exe) で使用できます。

PolicyAssertionCollection.Remove メソッドを使用してアサーションを一度に検索し、返し、削除する方法を次のコード例に示します。


  #region IPolicyImporter Members
  public const string name1 = "acme";
  public const string ns1 = "http://Microsoft/WCF/Documentation/CustomPolicyAssertions";

  /*
   * Importing policy assertions usually means modifying the bindingelement stack in some way
   * to support the policy assertion. The procedure is:
   * 1. Find the custom assertion to import.
   * 2. Insert a supporting custom bindingelement or modify the current binding element collection
   *     to support the assertion.
   * 3. Remove the assertion from the collection. Once the ImportPolicy method has returned, 
   *     any remaining assertions for the binding cause the binding to fail import and not be 
   *     constructed.
   */
  public void ImportPolicy(MetadataImporter importer, PolicyConversionContext context)
  {
    Console.WriteLine("The custom policy importer has been called.");
    // Locate the custom assertion and remove it.
    XmlElement customAssertion = context.GetBindingAssertions().Remove(name1, ns1);
    if (customAssertion != null)
    {
      Console.WriteLine(
        "Removed our custom assertion from the imported "
        + "assertions collection and inserting our custom binding element."
      );
      // Here we would add the binding modification that implemented the policy.
      // This sample does not do this.
      Console.ForegroundColor = ConsoleColor.Red;
      Console.WriteLine(customAssertion.NamespaceURI + " : " + customAssertion.Name);
      Console.WriteLine(customAssertion.OuterXml);
      Console.ForegroundColor = ConsoleColor.Gray;
    }
 }
#endregion


System.ServiceModel.Description.MetadataResolver が呼び出されたときにカスタム ポリシー インポーターを読み込むクライアント アプリケーション構成ファイルを次のコード例に示します。


<client>
    <endpoint 
      address="http://localhost:8080/StatefulService" 
      binding="wsHttpBinding"
      bindingConfiguration="CustomBinding_IStatefulService" 
      contract="IStatefulService"
      name="CustomBinding_IStatefulService" />
  <metadata>
    <policyImporters>
      <extension type="Microsoft.WCF.Documentation.CustomPolicyImporter, PolicyExtensions"/>
    </policyImporters>
  </metadata>
</client>



<client>
    <endpoint 
      address="http://localhost:8080/StatefulService" 
      binding="wsHttpBinding"
      bindingConfiguration="CustomBinding_IStatefulService" 
      contract="IStatefulService"
      name="CustomBinding_IStatefulService" />
  <metadata>
    <policyImporters>
      <extension type="Microsoft.WCF.Documentation.CustomPolicyImporter, PolicyExtensions"/>
    </policyImporters>
  </metadata>
</client>


MetadataResolver を使用して、メタデータをダウンロードし説明オブジェクトに解決する方法を次のコード例に示します。


// Download all metadata. 
ServiceEndpointCollection endpoints
  = MetadataResolver.Resolve(
    typeof(IStatefulService),
    new EndpointAddress("http://localhost:8080/StatefulService/mex")
  );


.NET Framework

サポート対象 : 4.5.2、4.5.1、4.5、4、3.5、3.0

.NET Framework Client Profile

サポート対象 : 4、3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (サーバー コア ロールはサポート対象外), Windows Server 2008 R2 (SP1 以降でサーバー コア ロールをサポート。Itanium はサポート対象外)

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

コミュニティの追加

追加
表示:
© 2015 Microsoft