在 Workflow Manager 1.0 工作流中定义和使用自定义代码活动与类型
可以使用完全声明性的模型创作 Workflow Manager 1.0 工作流,但如果需要基于自定义代码的活动或自定义数据类型,则服务器管理员可以使用本主题所述步骤将此自定义类型添加到支持的类型。可以显式添加每个类型(推荐这种操作,尤其适用于生产)。也可以禁用对任意代码的执行防护,其效果类似于在服务器上允许来自所有程序集的所有类型。此方法可以简化开发过程,但会牵涉到安全问题,因此通常不适用于生产。
本主题内容
注意 |
|---|
| 本主题概述了如何在 Workflow Manager 1.0 中使用自定义代码活动。有关创建自定义代码活动的详细信息,请参阅Designing and Implementing Custom Activities和Authoring Workflows, Activities, and Expressions Using Imperative Code。Workflow Manager 1.0 支持从 Activity 和 CodeActivity 继承的自定义活动。 |
支持自定义代码活动
Workflow Manager 1.0 允许用户发布和使用自己的声明性活动与声明性工作流。它还提供一组丰富的可在用户的活动和工作流中使用的现成工作流活动。Workflow Manager 1.0 还定义了一个“受信任图面”,其中包括支持的类型和活动集。
注意 |
|---|
| 有关 Workflow Manager 1.0 中的现成活动以及受信任图面的详细信息,请参阅 Workflow Manager 1.0 活动概述和 Workflow Manager 1.0 受信任图面。 |
扩展允许的类型和活动集可能会对 Workflow Manager 1.0 的安全性、性能、可伸缩性和可用性产生重大影响,除非绝对必要(例如,当工作流需要执行复杂的计算或数据转换,但声明性活动中的作者无法实施这种计算或转换时),否则不应考虑这种操作。在此情况下,高级用户可能需要改用自定义代码活动。服务器管理员可以扩展允许的类型集以包括此代码活动,但前提是该管理员完全信任此代码活动。
注意 |
|---|
| 执行 I/O 的活动应使用支持的 Http 消息活动,以确保通信参与一致性模型。有关详细信息,请参阅 Workflow Manager 1.0 中的消息和 Http Activities。 |
要扩展允许的类型集,管理员需要执行以下步骤:
-
将包含类型的程序集(例如某个自定义代码活动)连同所有依赖文件一起复制到以下两个文件夹中:
-
C:\Program Files\Workflow Manager\1.0\Workflow\WFWebRoot\bin
-
C:\Program Files\Workflow Manager\1.0\Workflow\Artifacts
-
C:\Program Files\Workflow Manager\1.0\Workflow\WFWebRoot\bin
-
在 C:\Program Files\Workflow Manager\1.0\Workflow\WFWebRoot\bin 中创建一个名为 AllowedTypes.xml 的文件
-
编辑 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> -
将 AllowedTypes.xml 复制到第二个文件夹:C:\Program Files\Workflow Manager\1.0\Workflow\Artifacts
-
在下一个计划维护期段重新启动 Workflow Manager 1.0 服务器。
注意 |
|---|
| 对于多服务器部署,必须在每台服务器上执行上述步骤。 |
现在,在步骤 3 中添加的类型可以在新发布的活动和工作流中使用。
注意 |
|---|
| 在 Workflow Manager 1.0 中,上述方法仅限派生自 Activity 或 CodeActivity 基类的自定义代码活动。 |
支持自定义数据类型
也可以将自定义数据类型添加到允许的类型集。要在工作流中启用该类型,应执行如上所述的相同一组步骤。但是,可能需要将其他活动添加到允许的类型列表,以访问该自定义数据类型的属性或初始化该自定义数据类型。表达式转换器不会自动处理属性引用;因此,在此情况下不能使用 VB 表达式。例如,如果自定义类型 Employee 包含 Name 和 Salary 属性,并且需要从工作流访问这些属性,则应创作 GetEmployeeName 和 GetEmployeeSalary 自定义代码活动,并将其添加到允许的类型列表。
删除自定义代码活动或数据类型
要从允许的类型列表中删除以前添加的类型,需要执行以下步骤:
-
在每台服务器上的两个位置(C:\Program Files\Workflow Manager\1.0\Workflow\WFWebRoot\bin 和 C:\Program Files\Workflow Manager\1.0\Workflow\Artifacts)编辑 AllowedTypes.xml,然后删除你想要从允许类型列表中删除的一个或多个类型的引用。
-
在所有服务器上停止 WorkflowServiceBackend 服务
-
在所有服务器上停止 WorkflowMgmtPool 应用程序池 - 这会显示 Workflow Manager 1.0 服务器不可用,因此应在维护期段内执行此操作
-
在所有服务器上删除以前已复制到 C:\Program Files\Workflow Manager\1.0\Workflow\WFWebRoot\bin 和 C:\Program Files\Workflow Manager\1.0\Workflow\Artifacts 的所有自定义文件
-
在所有服务器上启动 WorkflowMgmtPool 应用程序池
-
在所有服务器上启动 WorkflowServiceBackend 服务
-
删除使用了一个或多个已删除类型的所有声明性活动和工作流,使它们不再引用已删除的类型;或者发布这些不再引用已删除类型的活动和工作流的新版本。
通过禁用对任意代码的执行防护来支持自定义代码
Workflow Manager 1.0 允许管理员禁用对任意代码的执行防护。在开发解决方案的过程中,需要使用自定义代码来避免不断向允许类型的列表添加其他需要的类型,此时该选项可能非常便利。禁用对任意代码的执行防护后,其效果类似于向允许类型的列表添加来自服务器上所有程序集的所有类型。这会牵涉到相应的安全问题,因此,仅当已对 Workflow Manager 1.0 进行配置,使得只有受信任用户才有权上载工作流活动或修改 Workflow Manager 1.0 所用的数据库时,才应使用此选项。
禁用对任意代码的执行防护
要在 Workflow Manager 1.0 中禁用对任意代码的执行防护,管理员必须执行以下步骤:
-
打开 Workflow PowerShell 命令窗口。
注意有关打开 Workflow PowerShell 命令窗口的说明,请参阅使用 PowerShell 配置 Workflow Manager 1.0。 -
结合以下参数执行 Set-WFServiceConfiguration cmdlet:
-
对于 ServiceUri,请指定 Workflow 服务器的 URI,例如 https://myserver.mydomain.mycompany.com:12290。
-
对于 Name,请指定 WorkflowServiceAllowUnsafeTypes。
-
对于 Value,请指定 true。
-
对于 ServiceUri,请指定 Workflow 服务器的 URI,例如 https://myserver.mydomain.mycompany.com:12290。
重新启用对任意代码的执行防护
要在 Workflow Manager 1.0 服务器中重新启用对任意代码的执行防护,管理员必须执行以下步骤:
-
打开 Workflow PowerShell 命令窗口。
注意有关打开 Workflow PowerShell 命令窗口的说明,请参阅使用 PowerShell 配置 Workflow Manager 1.0。 -
结合以下参数执行 Set-WFServiceConfiguration cmdlet:
-
对于 ServiceUri,请指定 Workflow 服务器的 URI,例如 https://myserver.mydomain.mycompany.com:12290。
-
对于 Name,请指定 WorkflowServiceAllowUnsafeTypes。
-
对于 Value,请指定 false。
-
对于 ServiceUri,请指定 Workflow 服务器的 URI,例如 https://myserver.mydomain.mycompany.com:12290。
Workflow Manager 1.0 MSDN Community Forum
生成日期: