2

我试图了解如何在不知道活动的具体类型的情况下恢复(加载)以前持久的 WF4 活动。

为了加载一个持久化的活动,我不仅需要它workflowId(我有),而且我还需要传递一个活动的实例——所以我需要知道它的类型:

var workflowApplication = new WorkflowApplication(activity); // what type is activity?
workflowApplication.Load(workflowId);

问题在于它可能是多种类型中的一种 - 此活动旨在用于其他活动和工作流:它将消息发送到消息队列、书签然后持续存在。当通过消息队列接收到相应的消息时会恢复它,但如果不检查持久性数据,我不知道原始工作流的确切具体类型。这似乎是第 22 条规则。我无法在不知道活动类型的情况下加载工作流,如果不加载工作流并检查其持久数据,我也无法知道活动类型。

我觉得我在这里遗漏了一些东西 - 有没有办法在不知道活动的情况下创建托管 WorkflowActivity,或者activity在创建之前重新加载持久性数据以计算出实际类型WorkflowActivity

4

1 回答 1

2

通过 WF API 没有原生支持,您必须提出自己的解决方案。

最快的方法:Store Extensibility使用InstancePromotedProperties 表来保存你自己的属性。

可能是正确的方法:PersistenceIOParticipant似乎是正确的方法。只需创建自己的表来存储您想要的任何内容,包括活动的类型。

在坚持之前,使用自定义活动在某处为您保存它。由于各种原因,这不是最好的也不是正确的方法。

于 2012-04-27T16:58:55.177 回答