WF4.0基础篇 (十九) Persistence持久化

Persistence 持久化

WF4提供了一个抽象类System.Runtime.Persistence.InstanceStore,用于定义持久化的实现.该类来自于 System.Runtime.dll

可以从InstanceStore类继承来开发Persistence Provider,持久化过程中的对实例的数据访问需要另外一个继 承自System.Activities.Persistence.PersistenceParticipant

WF4提供了一个基于SQL Server的持久化类 SqlWorkflowInstanceStore

持久化的所有者

当只对实例进行持久化([实 例.PersistableIdle = PersistableIdleAction.Persist] 或instance.Persist(),或Persist Activity),而没将实例时UnLoad时,该持久 化的实例被其所有者锁定.如果对Load持久化的实例不是该实例的所有者,会报如下异常:

The execution of an InstancePersistenceCommand was interrupted because the instance 'c42a0d7d-d652-404a-9734- 67acb163ea48' is locked by a different instance owner. This error usually occurs because a different host has the instance loaded. The instance owner ID of the owner or host with a lock on the instance is 'c9959a30-60aa-47ae-a119- bc8ff1b97720'.

因为实例"c42a0d7d-d652-404a-9734-67acb163ea48"一个不同的实例的所有者被锁定,被打断了一个 InstancePersistenceCommand 的执 行。因为不同的主机有实例加载时,通常会发生此错误。实例的拥有人或主机实例上的锁的所有者 ID 是 ' c9959a30-60aa-47ae-a119- bc8ff1b97720。

关于Activity.CacheMetadata方法

注意:Activity.CacheMetadata方法会多次被调用

流程中的Activity.CacheMetadata 方法会在Run时全部调用,

每当从持久化中Load实例时,Activity.CacheMetadata方法会再次全部调用

与持久化相关的事件执 行顺序

实例.PersistableIdle

实例.Idle

实例.Unloaded

当实例完成后,执行完[实例.Completed]后才执行[ 实例.Unloaded]

SqlWorkflowInstanceStore 数据库

\Windows\Microsoft.NET\Framework\v4.0.21006 \SQL\en
SqlWorkflowInstanceStoreSchema.sql

 

SqlWorkflowInstanceStoreLogic.sql

时间: 2024-12-02 16:30:31

WF4.0基础篇 (十九) Persistence持久化的相关文章

WF4.0 基础篇(三十 完) 对学习WF的一点建议

从09年10月份 NET4.0 Bata 2发布后,我就开始写[WF4.0 基础篇]这个系列,经历了5个多月终于在NET4.0正式发布前将这个系列完成了. 这段时间与一些对WF4.0感兴趣的公司与开发人员有过一些交流. 先说一下对WF感兴趣的公司,有些公司已经开始用WF4.0开发业务流程管理类软件了,这些公司与我交流的问题多是在开发中遇到的现实问题,在交流中我发现这些公司对WF4.0技术的掌握成度还欠缺些火候,但这不是太大的问题,真正让我担忧的是这些公司基本上没有业务流程管理类软件(俗称工作流)

WF4.0 基础篇(二十四) Async Activity

项目说明: Async Activity Async的意思是异步,但有一点一定要注意,不能按字面理解,该Activity的功能是以同步的方式调用异步方法的Activity 建议看过[WF4.0 基础篇 (十三) InvokeMethod 调用方法 ]后,再看本文 类名 System.Activities.AsyncCodeActivity 文件 System.Activities.dll 结构说明 继承 Activity 是一个 abstract类 override 了 [CacheMetada

WF4.0基础篇(二) Activity介绍及WriteLine Activity的使用

从本篇开始,将正式讲解WF4.0,本文主要涉及如下内容:Activity介绍, WF4.0 中工作流的结构,通过WriteLine演示 InArgument<T>参数的使用 Activity介绍及WriteLine Activity的使用 代码下载 [WF4.0 基础篇 (一)开始使用WF] 的代码 http://files.cnblogs.com/foundation/helloWorkflow.rar 本文代码 http://files.cnblogs.com/foundation/Wri

WF4.0基础篇(一) 开始使用WF

前言 WF的全称是Windows Workflow Foundation , 最早接触WF是在2004年的时候,那时微软推出了一个CTP版的开发包,WinFX. 在WinFX中提供了三个内容: Avalon, Indigo, WinOE当时这三方面的内容我都有涉及 与微软很多的技术一样,WinFX在Bata2后就没有后续了.然而幸运的是我的这次长达一年的技术投入并没有浪费,WinFX在2006年以Net 3.0 的方式正式发布了(其实就算WinFX没有下文,我也没有什么遗憾,在学习WinFX的日

WF4.0 基础篇(二十九) WorkflowInspectionServices

WorkflowInspectionServices 类 WorkflowInspectionServices可以得到流程中的Activity,由于WF4.0的ActivityTree相对复杂,并不是象 WF3.X的结构那样清晰, 在WF4.0中Activitys,Body,Implementation等了Activity属性比效多,要循环Activity 就要做很多判断,这时可以使用WorkflowInspectionServices得到ActivityTree上的所有Activity. Wo

WF 4.0 基础篇(十四) Delay与WF4中的线程

本节主要介绍WF的实例是单线程运行的,Delay并不是Thread.Sleep,Parallel是单线程运行的,WorkflowApplication与WorkflowInvoker 在调用流程上的区别,InvokeMethod 调用异步方法 本文例子下载: http://files.cnblogs.com/foundation/DelayAndThreadWorkflow.rar 本文例子说明 WF的实例是单线程运行的 在WF3.x与WF4.0中,工作流实例都是单线程执行的 很多时候,[Par

WF4.0 基础篇(二十八) WF调用PowerShell

PowerShell 提供了命令行管理系统的功能,但通常情况下,操作人员要完成某种业务需要多组PowerShell 命令,这样会很烦琐,错误率也比效高.操作人员可以编写powerShell脚本来组织命令,本文将介绍如何使用WF来 组织PowerShell命令,让操作人员只关心具体的命令,在一个可视化的流程设计器中组织命令间的逻辑关系 WF4.0中并没有提供调用powerShell的Activity,但可以使用中 Microsoft.Activities.PowerShell.Dll与 Invok

WF4.0基础篇 (二十六) Interop调用WF3.X的Activity

本文例子说明 Interop调用WF3.X的Activity 类名 System.Activities.Statements.Interop 文件 System.Workflow.Runtime.dll 结构说明 继承 NativeActivity, ICustomTypeDescriptor 是一个 sealed类 override 了 [CacheMetadata方法] 与 [Cancel方法] 与[Execute方法] override 了 [CanInduceIdle属性] [Activ

WF4.0基础篇 (二十一) WorkflowInvoker

本文例子说明 WorkflowInvoker 类名 System.Activitys.WorkflowInvoker 文件 System.Activities.dll 结构说明 继承 Object 是一个 sealed类 override 了 [CacheMetadata方法] 与 [Execute方法] 功能说明 WorkflowApplication与WorkflowInvoker在调用流程上的区别 在WF4.0中,可以使用WorkflowApplication与 WorkflowInvok