匯出 (0) 列印
全部展開
本文章是由機器翻譯。 將指標移到文章內的文字上方即可查看原文。 其他資訊。
譯文
原文

IPolicyImportExtension 介面

定義物件的方法,該物件會匯入有關繫結的自訂原則判斷提示。

命名空間:  System.ServiceModel.Description
組件:  System.ServiceModel (在 System.ServiceModel.dll 中)

public interface IPolicyImportExtension

IPolicyImportExtension 類型會公開下列成員。

  名稱描述
公用方法ImportPolicy定義可以匯入自訂原則判斷提示及加入實作繫結項目的方法。
回頁首

您可以實作 IPolicyImportExtension 介面,在特定端點所公開的 WSDL 資訊中搜尋有關端點功能或需求的自訂原則判斷提示。 一般而言,原則匯入工具會搜尋特定的判斷提示,以及插入繫結項目、設定繫結項目或修改合約,以支援判斷提示的需求。

和其對應的 IPolicyExportExtension 不同的是,IPolicyImportExtension 不需要由 BindingElement 物件實作;您可以使用如<範例>一節所示的用戶端組態區段載入它,或使用程式設計的方式,將它加入至 System.ServiceModel.Description.WsdlImporter 建構函式。

Windows Communication Foundation (WCF) 會傳遞兩個物件至 ImportPolicy 方法:MetadataImporterPolicyConversionContext 一般而言,PolicyConversionContext 物件已經包含各繫結範圍的原則判斷提示。

IPolicyImportExtension 實作會執行下列步驟:

  1. 藉由呼叫 GetBindingAssertionsGetMessageBindingAssertionsGetOperationBindingAssertions 方法 (視範圍而定),找出所負責的自訂原則判斷提示。

  2. 從判斷提示集合移除原則判斷提示。 PolicyAssertionCollection.Remove 方法只要一個步驟,即可尋找、傳回及移除判斷提示。

  3. 藉由將必要的自訂 BindingElement 加入至 BindingElements 屬性或修改 PolicyConversionContext.Contract 屬性,來修改繫結堆疊或合約。

步驟 2 是十分重要的。 在呼叫所有的原則匯入工具之後,WCF 會檢查是否還剩餘任何的原則判斷提示。 如果有,WCF 會假設原則匯入不成功,而不會匯入有關聯的繫結。

重要事項重要事項

惡意中繼資料提供者在嘗試不當利用原則匯入工具時,可能會嘗試在中繼資料中傳送格式不正確的 XML。 強烈建議自訂原則匯入工具對於可以傳遞給它的所有形式的 XML 都要很穩固。

自訂 MetadataImporter 實作必須實作自己的 PolicyConversionContext 物件,以擷取附加至自訂中繼資料格式的原則判斷提示。

如果要匯出和匯入不是原則判斷提示的自訂 WSDL 項目,請參閱 System.ServiceModel.Description.IWsdlExportExtensionSystem.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 系統需求

社群新增項目

新增
Microsoft 正展開一份線上問卷調查,了解您對於 MSDN 網站的看法。 如果您選擇參加,您離開 MSDN 網站時即會顯示線上問卷調查。

您是否想要參加?
顯示:
© 2014 Microsoft