我使用Windows Workflow 4编写了一个状态机,它有许多状态,其中包含用于从一个状态恢复到另一个状态的书签。闲置的时候,我想坚持状态机状态,并在以后再次将其旋转(可能在未来几周内)。
我的状态机需要一系列服务(接口注入)作为' in-arguments'在运行时以及状态跟踪器的实例'跟踪状态机需要持久和恢复的相关变量的类。状态类的属性是简单类型,如日期,枚举和数字。
我想做的是这样的事情:
var store = new InMemoryPersistentStore(new StateObject() { State = "Pending", Value = 10 );
var workflowInstance = factory.ResumeFrom(store);
workflowInstance.DoSomething(); // From existing restored state.
我希望能够重新创建恢复到状态的工作流实例,而无需在XML中保留工作流的整个结构。开箱即用的持久性存储在其要求中非常严格,例如内部需要可序列化的所有对象,这对我来说是不实用的。
我还读过有关StateMachineStateTracker和它的邻近类StateTrackerPersistenceProvider,这些类在他们的文档中是难以捉摸的(这些来自System.Activities.Extensions供其他读者使用)但这些似乎也依赖于盒子Sql Persistence商店再次显得超重。
我似乎无法找到显示有关此流程或如何解决此流程的详细程度的示例。我已经查看了样本MS文档,它将每个实例值序列化为XML并再次返回,但这对我来说似乎是一种巨大的矫枉过正(而且正如我所说的那样对我不可能)并且还充满了(我相信是什么) )将来的版本问题。
有没有办法,最好是一种简单的方法,我可以根据提供的注入状态类实例将我的工作流程从内存转换为状态?我考虑过在工作流程开始时设置一个状态转换来“跳跃”。根据我的班级到适当的初始状态,但这似乎非常不优雅,非常不喜欢我,我更喜欢避免它。任何指针都将非常感激。
答案 0 :(得分:0)
当我做了类似的事情(使用常规工作流而不是状态机)时,我将工作流保存到常规持久性存储中,而不会持久注入“状态跟踪器”,然后将“状态跟踪器”保持为另一个更合适的状态跟踪器,数据库。 之后,您可以从商店恢复工作流程,将执行点放在存储的位置,然后重新注入“状态跟踪器”类。