在 .NET Framework 4 中将 .NET Framework 3.0 WF 活动与 Interop 活动一起使用

本主题适用于 Windows Workflow Foundation 4。

Interop 活动是一个 .NET Framework 4 (WF 4) 活动,该活动将一个 .NET Framework 3.5 (WF 3.5) 活动包装在 .NET Framework 4 工作流中。WF 3 活动可以是单叶活动,也可以是整个活动树。.NET Framework 3.5 活动的执行(包括取消和异常处理)和持久化在执行的 .NET Framework 4 工作流实例的上下文中进行。

Ee264173.note(zh-cn,VS.100).gif Visual Basic 注意:
除非工作流项目的“目标框架”设置设为“.NET Framework 4”,否则 Interop 活动不会显示在工作流设计器工具箱中。

将 WF 3 活动与 Interop 活动一起使用的条件

若要使 WF 3 活动在 Interop 活动中成功执行,必须满足以下条件:

在 Interop 活动中配置 WF 3 活动

若要跨互操作边界配置 WF 3 活动并将数据传入和传出该活动,则 Interop 活动应公开 WF 3 活动的属性和元数据属性。WF 3 活动的元数据属性(如 Name)通过 ActivityMetaProperties 集合公开。这是一个名称/值对的集合,用于为 WF 3 活动的元数据属性定义值。元数据属性是由设置了 Metadata 标志的依赖项属性支持的属性。

WF 3 活动的属性通过 ActivityProperties 集合公开。这是一个名称/值对的集合,其中每个值都是一个 Argument 对象,用于为 WF 3 活动的属性定义参数。由于无法推断 WF 3 活动属性的方向,因此每个属性呈现为一个 InArgument/OutArgument 对。根据活动属性的用法的不同,您可能希望提供一个 InArgument 项和/或一个 OutArgument 项。集合中 InArgument 项的期望名称为在 WF 3 活动上定义的属性的名称。集合中 OutArgument 项的期望名称为该属性的名称和字符串“Out”的串联。

在 Interop 活动中使用 WF 3 活动的限制

不能将 WF 3 系统提供的活动直接包装在 Interop 活动中。对于某些 WF 3 活动,如 DelayActivity,这是因为存在类似的 WF 4 活动。对于其他活动,这是因为不支持活动的这个功能。许多 WF 3 系统提供的活动可在由 Interop 活动包装的工作流中使用,但受到以下限制:

  1. 不能在 Interop 活动中使用 SendReceive

  2. 不能在 Interop 活动中使用 WebServiceInputActivityWebServiceOutputActivityWebServiceFaultActivity

  3. 不能在 Interop 活动中使用 InvokeWorkflowActivity

  4. 不能在 Interop 活动中使用 SuspendActivity

  5. 不能在 Interop 活动中使用与补偿相关的活动。

还有一些行为具体信息,可了解有关在 Interop 活动中使用 WF 3 活动的信息:

  1. 执行 Interop 活动时会对 Interop 活动中包含的 WF 3 活动进行初始化。在 WF 4 中,执行之前工作流实例没有初始化阶段。

  2. 事务开始后,WF 4 运行时没有检查点工作流实例状态,无论事务开始的位置如何(在 Interop 活动内部还是外部)。

  3. Interop 活动中活动的 WF 3 跟踪记录以 InteropTrackingRecord 对象的形式提供给 WF 4 跟踪参与者。InteropTrackingRecord 是从 CustomTrackingRecord 派生的。

  4. WF 3 自定义活动可以在互操作环境中使用工作流队列访问数据,其访问方式与在 WF 3 工作流运行时中完全相同。不需要更改任何自定义活动代码。在宿主上,通过恢复 Bookmark 可将数据排入 WF 3 工作流队列。书签的名称是字符串形式的 IComparable 工作流队列名称。

另请参见

任务

在 .NET Framework 4 工作流中使用 .NET Framework 3.0 或 .NET Framework 3.5 活动