Resuming a persisted Window Workflow 4 Activity without knowing concrete type of activity

亡梦爱人 提交于 2019-12-07 19:26:09

问题


I am trying to understand how one can resume (load) a previously persisted WF4 activity without knowing the concrete type of the activity.

In order to load a persisted activity, I not only need its workflowId (which I have), but I need to pass in an instance of the activity too - so I need to know it's type:

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

The problem is that it could be one of a number of types - this activity is intended to be used within other activities and workflows: it sends a message to a message queue, bookmarks and then persists. It is resumed when a corresponding message is received via the message queue but I don't know the exact concrete type of the original workflow without examining the persistence data. This seems like catch-22. I can't load the workflow without knowing the activity type, and I can't know the activity type without loading the workflow and examining the its persisted data.

I feel like I'm missing something here - is there a way to either create a hosting WorkflowActivity without knowing the activity, or a way to reload the persistence data to work out the actual type of activity before creating the WorkflowActivity?


回答1:


There's no native support to do it through WF API, you've to come up with your own solution.

The fastest approach: Store Extensibility to use InstancePromotedProperties table to save your own properties.

Probably the correct approach: PersistenceIOParticipant seems the correct way of doing it. Just create your own table to store whatever you want including activity's type.

Use a custom activity to save it for you, somewhere, before persist. Not the best nor correct way of doing it for a variety of reasons.



来源:https://stackoverflow.com/questions/10349088/resuming-a-persisted-window-workflow-4-activity-without-knowing-concrete-type-of

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!