在 Workflow Manager 1.0 工作流程中定義及使用自訂程式碼活動及類型

 

發佈時間: 2016年5月

Workflow Manager 1.0 工作流程的編寫是使用完全宣告式的模型,但如果需要自訂程式碼活動或自訂資料類型,伺服器管理員可以使用本主題中描述的步驟,將這個自訂類型新增至支援的類型。每個類型可以明確地新增,這是建議的方式,尤其是要作為正式作業之用。或者,可以停用對於執行任意程式碼的保護,這個結果類似於允許伺服器上所有組件的所有類型。此方法或許會簡化開發程序,但是有安全性的顧慮,因此通常不適合用於正式作業。

本主題內容

  • 支援自訂程式碼活動

  • 支援自訂資料類型

  • 移除自訂程式碼活動或資料類型

  • 停用對於執行任意程式碼的保護來支援自訂程式碼

System_CAPS_note注意事項

本主題提供在 Workflow Manager 1.0 中使用自訂程式碼活動的概述。如需以下內容的詳細資訊 建立自訂程式碼活動,請參閱 Designing and Implementing Custom Activities 和 Authoring Workflows, Activities, and Expressions Using Imperative Code。Workflow Manager 1.0 支援從 ActivityCodeActivity 繼承的自訂活動。

支援自訂程式碼活動

Workflow Manager 1.0 允許使用者發行和使用他們自己的宣告式活動及宣告式工作流程。它也提供一組豐富的現成工作流程活動,可以用於使用者的活動及工作流程。Workflow Manager 1.0 也定義了「信任表面」,它包括支援的類型和活動集。

System_CAPS_note注意事項

如需 Workflow Manager 1.0 中及信任表面中現成活動的相關資訊,請參閱 Workflow Manager 1.0 活動概觀Workflow Manager 1.0 信任表面

擴充允許類型和活動集,可能會對 Workflow Manager 1.0 的安全性、效能、延展性與可用性造成巨大的衝擊,因此不到絕對必要不應該予以考慮,例如當工作流程需要執行精密的計算或是資料轉換,而在宣告式活動中是無法編寫的。在此情況下,進階使用者可能會想改用自訂程式碼活動。伺服器管理員可以擴充允許類型集,以包含這個程式碼活動 (假設管理員完全信任這個程式碼活動的話)。

System_CAPS_note注意事項

執行 I/O 的活動應該使用支援的 HTTP 訊息活動,以便確保通訊參與了一致性模型。如需詳細資訊,請參閱Workflow Manager 1.0 中的訊息Http 活動

為了擴充允許類型集,管理員需要執行下列步驟:

  1. 複製包含類型的組件 (例如自訂程式碼活動) 以及所有相依檔案到下列兩個資料夾:

    • C:\Program Files\Workflow Manager\1.0\Workflow\WFWebRoot\bin

    • C:\Program Files\Workflow Manager\1.0\Workflow\Artifacts

  2. 在 C:\Program Files\Workflow Manager\1.0\Workflow\WFWebRoot\bin 建立一個名為 AllowedTypes.xml 的檔案

  3. 編輯 AllowedTypes.xml 以在 <AllowedTypes> xml 元素中新增想要的類型,如以下範例所示。

    <AllowedTypes>
      <Assembly Name="Contoso.DataTransformations">
        <Namespace Name="Contoso.DataTransformations.Activities">
          <Type>DoDomainSpecificCalculation1</Type>
        </Namespace>
      </Assembly>
    
      <Assembly Name="Contoso.StronglyTypedAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
        <Namespace Name="Contoso.FinancialCalculation.Activities">
          <Type> GetPresentValueOfABond</Type>
        </Namespace>
      </Assembly>
    </AllowedTypes>
    
  4. 將 AllowedTypes.xml 複製到第二個資料夾:C:\Program Files\Workflow Manager\1.0\Workflow\Artifacts

  5. 在下一次規劃的維護時間範圍內重新啟動 Workflow Manager 1.0 伺服器。

System_CAPS_note注意事項

如果是多伺服器部署,則必須在每一台伺服器上執行以上步驟。

現在,步驟 3 中新增的類型可以用在新發行的活動和工作流程。

System_CAPS_note注意事項

在 Workflow Manager 1.0 中,以上方法只限於衍生自 ActivityCodeActivity 基本類別的自訂程式碼活動。

支援自訂資料類型

自訂資料類型也可以新增到允許類型集。應該遵循上述的同一組步驟,以便在工作流程中使用該類型。不過,可能需要新增其他活動到允許類型清單,才能存取該自訂資料類型的屬性,或是把它初始化。運算式轉譯程式不會自動處理屬性參考,因此 VB 運算式不能用於此。例如,如果自訂類型 Employee 具有 Name 和 Salary 屬性,且需要從工作流程存取這些屬性,則應該編寫 GetEmployeeName 和 GetEmployeeSalary 自訂程式碼活動,並新增至允許類型清單。

移除自訂程式碼活動或資料類型

若要從允許類型清單移除先前新增的類型,需要執行下列步驟:

  1. 在每一台伺服器的兩個位置 (C:\Program Files\Workflow Manager\1.0\Workflow\WFWebRoot\bin 和 C:\Program Files\Workflow Manager\1.0\Workflow\Artifacts) 編輯 AllowedTypes.xml,並針對您要從允許類型清單移除的類型,移除對它們的參考。

  2. 停止所有伺服器上的 WorkflowServiceBackend 服務

  3. 停止所有伺服器上的 WorkflowMgmtPool 應用程式集區 – 這會造成無法使用 Workflow Manager 1.0 伺服器,因此應該在維護時間範圍內進行

  4. 移除先前複製到 C:\Program Files\Workflow Manager\1.0\Workflow\WFWebRoot\bin 和 C:\Program Files\Workflow Manager\1.0\Workflow\Artifacts 的所有伺服器上的所有自訂檔案

  5. 啟動所有伺服器上的 WorkflowMgmtPool 應用程式集區

  6. 啟動所有伺服器上的 WorkflowServiceBackend 服務

  7. 移除過去使用被移除之類型的所有宣告式活動和工作流程,讓它們不再參考它,或是發行這些活動和工作流程的新版本,不再參考已經移除的類型。

停用對於執行任意程式碼的保護來支援自訂程式碼

Workflow Manager 1.0 允許管理員停用對於執行任意程式碼的保護。這在開發使用自訂程式碼的解決方案時可能是個方便的選項,可以避免隨著時間增加額外需要的類型到允許類型清單的這項負擔。停用對於執行任意程式碼的保護時,它的結果類似於將伺服器上所有組件的所有類型都新增至允許類型清單。這有相對應的安全性顧慮,因此只應該在 Workflow Manager 1.0 的設定使得唯有受信任使用者有權上傳工作流程活動,或修改 Workflow Manager 1.0 所用的資料庫時,才可以使用。

停用對於執行任意程式碼的保護

為了在 Workflow Manager 1.0 中停用對於執行任意程式碼的保護,管理員必須執行下列步驟:

  1. 開啟 Workflow PowerShell 命令視窗。

    System_CAPS_note注意事項

    如需開啟 Workflow PowerShell 命令視窗的指示,請參閱使用 PowerShell 設定 Workflow Manager 1.0

  2. 使用下列參數執行 Set-WFServiceConfiguration Cmdlet:

重新啟用對於執行任意程式碼的保護

為了在 Workflow Manager 1.0 中重新啟用對於執行任意程式碼的保護,管理員必須執行下列步驟:

  1. 開啟 Workflow PowerShell 命令視窗。

    System_CAPS_note注意事項

    如需開啟 Workflow PowerShell 命令視窗的指示,請參閱使用 PowerShell 設定 Workflow Manager 1.0

  2. 使用下列參數執行 Set-WFServiceConfiguration Cmdlet: