WorkflowRuntime启动一个独立的工作流任务。在你的任务执行过程中,WorkflowRuntime也会针对不同的情况响应对应的事件。并且,WorkflowRuntime还能在你的执行环境中增加一个附加的服务来保持跟踪。
WorkFlow架构

WorkflowRuntime的属性
IsStarted:用来指明workflow运行时是否已经启动并准备接受workflow实例。当宿主调用“StartRuntime”前IsStarted为False。期间它一直维持True直到宿主调用“StopRuntime”为 止。需注意的是当它正在运行中你不能增加核心服务。
Name :获取或设置和WorkflowRuntime关联的名字。Workflow运行时正在运行中你不能设置这个属性(也就是说当IsStarted为True)。企图这样做的结果就是抛出一个 “InvalidOperationException”异常。
WorkflowRuntime常用方法
AddService :为workflow运行时添加指定的服务。能添加的服务类型和时间受到种种限制。关于服务的详细信息将在第五章介绍。
CreateWorkflow :创建一个workflow实例,它包含一些指定(但可选)的参数。假如workflow运行时没有启动,该方法就调用StartRuntime方法。
GetWorkflow :通过指明workflow实例的标识符(由一个Guid组成)来检索workflow实例。假如这个workflow实例是空闲和持久化保存的,它将被重新加载并执行。
StartRuntime :启动workflow运行时和相关服务,并引发“Started”事件。
StopRuntime :停止workflow运行时和相关服务,并引发“Stoped”事件。
workflow运行时的相关事件描述
Started :workflow运行时启动后激发。
Stopped :workflow运行时停止后激发。
WorkflowCompleted :一个workflow实例完成后激发。
WorkflowIdled :一个workflow实例进入空闲状态时激发。当workflow实例进入了空闲状态后,你就有机会把他们从内存中卸载掉、
到数据库并可在稍后的时间把它们加载进内存。
WorkflowTerminated 当一个workflow实例被终止后激发。在宿主中调用一个workflow实例的Terminate方法、或通过一个Terminate活动、
workflow运行时产生一个未经捕获的异常时都会终止该workflow。
示例:
代码
public static class WorkflowFactory
{
private static WorkflowRuntime _workflowRuntime = null;
private static object _syncRoot = new object();
private static AutoResetEvent waitHandle = new AutoResetEvent(false);
static void Main(string[] args)
{
WorkflowRuntime workflowRuntime = WorkflowFactory.GetWorkflowRuntime();
workflowRuntime.WorkflowIdled += new EventHandler<WorkflowEventArgs>(workflowRuntime_WorkflowIdled);
workflowRuntime.WorkflowCompleted += new EventHandler<WorkflowCompletedEventArgs>(workflowRuntime_WorkflowCompleted);
workflowRuntime.WorkflowTerminated += new EventHandler<WorkflowTerminatedEventArgs>(workflowRuntime_WorkflowTerminated);
Console.WriteLine("等待workflow完成。");
waitHandle.WaitOne();
Console.WriteLine("完成.");
workflowRuntime.Stopped += new EventHandler<WorkflowRuntimeEventArgs>(StopWorkflowRuntime);
}
// 获取WorkflowRuntime
public static WorkflowRuntime GetWorkflowRuntime()
{
//多线程环境下防止并发访问
lock (_syncRoot)
{
if (null == _workflowRuntime)
{
_workflowRuntime = new WorkflowRuntime();
_workflowRuntime.StartRuntime();
}
}
_workflowRuntime.StartRuntime();
return _workflowRuntime;
}
// 停止WorkflowRuntime
static void StopWorkflowRuntime(object sender, WorkflowRuntimeEventArgs e)
{
if (_workflowRuntime != null)
{
if (_workflowRuntime.IsStarted)
{
try
{
_workflowRuntime.StopRuntime();
}
catch (ObjectDisposedException)
{
}
}
}
}
static void workflowRuntime_WorkflowIdled(object sender, WorkflowEventArgs e)
{
Console.WriteLine("workflow实例空闲中");
}
static void workflowRuntime_WorkflowCompleted(object sender, WorkflowCompletedEventArgs e)
{
Console.WriteLine("workflow实例已完成");
waitHandle.Set();
}
static void workflowRuntime_WorkflowTerminated(object sender, WorkflowTerminatedEventArgs e)
{
Console.WriteLine("workflow实例已终止,原因:'{0}'。",e.Exception.Message);
waitHandle.Set();
}

浙公网安备 33010602011771号