wf打包服务持久化_第1页
wf打包服务持久化_第2页
wf打包服务持久化_第3页
wf打包服务持久化_第4页
wf打包服务持久化_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1SqlPersistenervice 持久化数据库1.1数据库安装1.2数据库时间格式说明1.3表结构1.3.1 Instane对这个表我以前有一个错误的性叫法,叫它实例表,其实应叫未完成事例的运行状态表uidInstanceID sesus unlocked blocked info modified ownerID在 SqlPersistenervice 数据库中,时间值是 GMT 格式的,这样做的目地是使用的时间轴,如此可以解决一台在的服务器与一台的服务器就可以协同工作时的时差问题GMT 比时间晚 8 小时系统盘Windows.NETFrameworkv3.0Windows Workf

2、low FoundationSQLEN 下SqlPersistenervice_Schema.sql SqlPersistenervice_Logic.sql1.3.2CompletedScope1.4过程2SqlWorkflowPersistenerviceSqlWorkflowPersistenervice 作为一个 Persistenervice 的功能实现类加载到WorkflowRuntime 中为引擎提供了一种使用 SQLServer 数据实现持久化的功能。SqlWorkflowPersistenervice 类是使用 SQL 数据库对工作流状态进行持久化的服务为了能够使用 SqlW

3、orkflowPersistenervice,数据库还需要启动 DTC 服务2.1 加载说明每当引擎起动时(StartRuntime),只要 Instan,并将 ownedUntil 字段设为加载的时间e 表中有实例数据,就会将该实例载入引1. 引擎使用 GetWorkflow 方法,可通过 SqlWorkflowPersistenervice 服务将存于数据库uidInstanceID completedScopeID semodifiedownedUntil nextTimer中的实例加载并返回2.实例使用 load 方法,可触发引擎的 WorkflowLoaded 事件3.没有经过持久化

4、的实例,调用 load 方法不会出错,也不产生引擎的 WorkflowLoaded 事件4.加载的持久化实例不用 load 方法也能直接操作,但这样不会产生引擎的 WorkflowLoaded事件,调用 load 方法可以产生引擎的 WorkflowLoaded 事件,除此之外,我没跟出什么其他的5.引擎.GetWorkflow(GUID)方法可以返回一个引存在的实例2.2 持久化说明1.当引擎停止时(StopRuntime),就会将引擎内的所有工作流实例存入 InstanownedUntil 字段为空e 表,2.实例使用 Unload 方法,通过加载到引的 SqlWorkflowPersis

5、ten实例的内存移出与保存到数据库的操作ervice 服务,完成3.没有加载 SqlWorkflowPersistenervice 时, 实例的 TryUnload 方报异常。注:没加载 SqlWorkflowPersistenervice 服务时,引擎停止后,引擎并没有,引的实例也存在,只是所有的执行都被系统级挂起,当重新启动引擎时,所有的实例还可继续运行如果引不存在,SqlWorkflowPersistenervice 服务会到数据库中找该实例,并将其加载到引擎如果引没有指定 GUID 的实例,会报 Workflow with id GUID not found in se persist

6、entore.如没加载 SqlWorkflowPersistenervice 服务报的异常为 The workflow hosting environment does noversistenervice as required by an operation on the workflow instance4.如果调用 UnLoad 方法时,实例在挂起状态时(如:实例.Suspend)5.如果调用 UnLoad 方法时,实例在引创建后,还没开始执行前,2.3 idle 状态的持久化idle 状态即空闲状态,如 Delay 结点就能使实例进入 idle 状态,并触发引擎的WorkflowIdl

7、ed 事件。SqlWorkflowPersistenervice 会不停的刷 Instane 表,发现有状态为 Delay 的实例,且 nextTimer 小于当前时间,就执行他。所以,持久化 Delay 状态的实例,不用人为加载运行,SqlWorkflowPersisten服务会自动运行的。ervice1. 如果调用 UnLoad 方法时,实例在运行到 Delay 结点的 idle 状态2. 使用 SqlWorkflowPersistenUnload 将其持久化ervice 可以实现每当实例进入 idle 状态后,自动将调用可以使用 SqlWorkflowPersisten动持久化ervic

8、e 类的构造函数的 unloadOnIdle 参数设置是否自如调用 Unload 方法 sus 值为 0 unlocked 值为 1blocked 值为 1nextTimer 值为实际 Delay 应苏醒的时间。sus 值为 4 info 值为空其他同上sus 值为 2info 值为 Suspend 方法的参数unlocked 值为 1blocked 值为 0 modified 为操作的时间nextTimer 为 9999-12-31 23:59:59.9973. DelayActivity 的延时修正DelayActivity 是一个提供延时处理的组件,当实例处于Idle 状态时,实例的Un

9、loadOnIdle被置位。等时间到达后,该实例继续向下执行,这里有一个问题,就是工作流实例被不同的进程进行处理时的延时修正问题SqlWorkflowPersistenervice 提供了这个功能Instane 表的 NextTime 字段就是用于修正延时时间用的。SqlWorkflowPersistenervice 的构造函数中还有一个参数 Loadingerval,此参数可以使引擎在多少时间间隔内去检测那些超时的工作流实例,如果超时了则自动进行加载并运行。也就是引擎要过多久才去刷一次数据库,以查检是否有到时的实例4. 重新加载工作流后,计时器不会恢复操作的错误2.4 锁定问题工作流引擎加载

10、工作流实例时,锁定该实例,这样其它引擎就不能加载这个工作流实例了。当工作流实例保存回数据库后便解除锁定状态,这样其它引擎便可加载该工作流实例了。 当加载工作流实例的进程突然死掉,则数据库的锁定状态是不是永远都不能了。在 SqlWorkflowPersistenervice 的构造函数中有一个参数 instanceOwnershipDuration,指明了锁定工作流实例的时间限制。可以依据现实情况去估计一个工作流实例在某一个环节处理所用的时间进行设置,如 10 分钟。如果处理时间超过这个值则会被其它引擎自动,也就是说可以由其它引擎来进行而不依赖于当前的进程实现过程:Instan e 表里 着工作

11、流的实例,OwnedUntil 字段 了该工作流实例锁定的到期时间,当引擎加载一个工作流实例时,它会将当前时间加上 SqlWorkflowPersisten ervice 构造函数中的 instanceOwnershipDuration 参数指定的时间,并把相加的时间存放到 OwnedUntil字段里。数据库里有一个 过程 UnlockInstan e,其它的工作流引擎就是用此 过程来被锁定的工作流实例。这个过程是引擎自动完成的.WF 的一个 BUG2.5 构造函数说明2.5.1第一种2.5.2第二种2.6 属性2.7 GetAllWorkflows()方法Retrieves instance

12、 descriptions of all得到所有被持久化的实例说明,persisted workflows.当实例被持久化后,实例信息从引擎列表中移出,会添加到持久化列表中当引擎启动后,会从持久化数据库中加载所有被持久化的数据,这时引擎列表与该列表内EnableRetries 属性Loadingerval 属性Gets the length of the loadingerval.ServiceInstanceId 属性Gets the service instance identifier.new SqlWorkflowPersistenervitring connectionString,

13、booloadOnIdle,TimeSpan instanceOwnershipDuration , TimeSpan loadingerval)参数:string connectionString是持久化的数据库参数:booloadOnIdle为真表示自动将调用 Unload 将 Delay 状态的实例持久化参数:TimeSpan instanceOwnershipDuration 引擎锁定实例,防止其他引擎加载的时间参数:TimeSpan loadingerval 是引擎自动到数据库中查找是否有 idle 到实例的时间步长new SqlWorkflowPersistenervitring

14、connectionString)参数:string connectionString是持久化的数据库连接字串容相同3 当实例完成后,实例信息从引擎列表中移出,也从持久化列表中移出2.8 LoadExpiredTimerWorkflowIds()方法Retrieves a list of completed timer instan.As IList(Of Guid)3实例与持久化相关的方法Load加载实例SqlWorkflowPersistenerviWPS=new SqlWorkflowPersistenervice(constring);foreach (Guid guid in SWP

15、S.LoadExpiredTimerWorkflowIds()string v = guid.ToString();SqlWorkflowPersistenerviWPS=new SqlWorkflowPersistenervice(constring); System.Collections.IEnumerable workflows = SWPS.GetAllWorkflows();foreach (SqlPersistenceWorkflowInstanceDescription instanceDescription in workflows)string v=instanceDesc

16、ription.SuspendOrTerminateDescription; Guid guid =instanceDescription.WorkflowInstanceId;bool b = instanceDescription.IsBlocked;DateTime time = instanceDescription.NextTimerExpiration.Value; WorkflowSus st = instanceDescription.Sus;/Wpleted/WorkflowSus.Created/WorkflowSus.Running/WorkflowSuspended/WorkflowSus.Terminated4引擎引持久化相关的事件WorkflowUnloadedWorkflowLoaded加载的持久化实例不用 load 方法也能直接操作,但这样不会产生引擎的 WorkflowLoaded 事件,调用 load 方法可以产生引擎的 WorkflowLoaded 事件,除此之外,我没跟出什么其他的TryUnload从内存中卸载实例,返回如果实例处

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论