- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
持久化PersistenceService
SqlWorkflowPersistenceService类
说明
SqlWorkflowPersistenceService类是使用SQL数据库对工作流状态进行持久化的服务
实例使用Unload方式通过加载到引擎中的SqlWorkflowPersistenceService服务,完成实例的内存移出与保存到数据库的操作,
引擎使用GetWorkflow方法,可通过SqlWorkflowPersistenceService服务将存于数据库中的实例加载并返回
实例使用load方法,可触发引擎的WorkflowLoaded事件
SqlWorkflowPersistenceService的工作原则
WorkflowRuntime与PersistenceService以一种松散藕合的方式工作。
SqlWorkflowPersistenceService作为一个PersistenceService的功能实现类加载到WorkflowRuntime中为引擎提供了一种使用SQLServer数据实现持久化的功能。
SqlWorkflowPersistenceService加载到WorkflowRuntime后,在工作中有如下特征:
1.每当引擎起动时(StartRuntime),只要InstanceState表中有实例数据,就会将该实例载入引擎中,并将ownedUntil字段设为加载的时间
2.每当引擎停止时(StopRuntime),就会将引擎内的所有工作流实例存入InstanceState表,ownedUntil字段为空
注:没加载SqlWorkflowPersistenceService服务时,引擎停止后,引擎并没有释放,引擎中的实例也存在,只是所有的执行都被系统级挂起,当重新启动引擎时,所有的实例还可继续运行
3.实例在挂起状态时(如:实例.Suspend),如status值为2,unlocked值为1,blocked值为0,info值为Suspend方法的参数,modified为操作的时间,nextTimer为9999-12-31 23:59:59.997
4.实例在引擎中创建后,还没开始执行前,如status值为4,info值为空其他同上。
5.实例在运行到Delay结点的idle状态时,如status值为0,unlocked值为1,blocked值为1,nextTimer值为实际Delay应苏醒的时间。
SqlWorkflowPersistenceService会不停的刷InstanceState表,发现有状态为Delay的实例,则nextTimer小于当前时间,就执行他。
所以,持久化Delay状态的实例,不用人为加载运行,SqlWorkflowPersistenceService服务会自动运行的。
实例在运行到Delay结点的idle状态时,会自动持久化,对于过短与过长的idle可以设定解决方案,具体见SqlWorkflowPersistenceService类构造函数
6.引擎.GetWorkflow(GUID)方法可以返回一个引擎中存在的实例,
如果引擎中不存在,SqlWorkflowPersistenceService服务会到数据库中找该实例,并将其加载到引擎
如果引擎中没有指定GUID的实例,会报Workflow with id GUID not found in state persistence store.
如没加载SqlWorkflowPersistenceService服务报的异常为The workflow hosting environment does not have a persistence service as required by an operation on the workflow instance
7.没有加载SqlWorkflowPersistenceService时, 实例的TryUnload方法会报异常。
8.没有经过持久化的实例,调用load方法不会出错,也不产生引擎的WorkflowLoaded事件
9.加载的持久化实例不用load方法也能直接操作,但这样不会产生引擎的WorkflowLoaded事件,调用load方法可以产生引擎的WorkflowLoaded事件,除此之外,我没跟出什么其他的
10.引擎没正常退出时,ownedUntil字段不会改为空,但不会响应下次的引擎的正常启动,仍按方式[1]启动
11.已被持久化的实例,Delay状态的实例,在到时后会被刷回引擎,其他状态的实例不会被刷回引擎
12.引擎运行时,InstanceState表并没有上锁,因此可以多个引擎同时作用于同一实例表
关于idle状态
即实例的空闲状态,如Delay结点就能使实例进入idle状态,
文档评论(0)