血泪

一切都是源于对你的爱~
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

简单WorkflowRuntime示例

Posted on 2010-11-22 21:11  xiaoqiang_888  阅读(309)  评论(0)    收藏  举报

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();
    }