【翻译】WF从入门到精通(第二章):workflow运行时 笔记

  1. WorkflowRuntime

表2-1 WorkflowRuntime的属性

属性功能
IsStarted用来指明workflow运行时是否已经启动并准备接受workflow实例。当宿主调用“StartRuntime”前IsStarted为False。期间它一直维持True直到宿主调用“StopRuntime”为止。需注意的是当它正在运行中你不能增加核心服务。
Name     获取或设置和WorkflowRuntime关联的名字。Workflow运行时正在运行中你不能设置这个属性(也就是说当IsStarted为True)。企图这样做的结果就是抛出一个“InvalidOperationException”异常。

表2-2 WorkflowRuntime的方法

方法功能
AddService为workflow运行时添加指定的服务。能添加的服务类型和时间受到种种限制。关于服务的详细信息将在第五章介绍。
CreateWorkflow创建一个workflow实例,它包含一些指定(但可选)的参数。假如workflow运行时没有启动,该方法就调用StartRuntime方法。
GetWorkflow通过 指明workflow实例的标识符(由一个Guid组成)来检索workflow实例。假如这个workflow实例是空闲和持久化保存的,它将被重新加载并执行。
StartRuntime启动workflow运行时和相关服务,并引发“Started”事件。
StopRuntime停止workflow运行时和相关服务,并引发“Stoped”事件。

    

表2-2 WorkflowRuntime的事件

事件功能
Started当workflow运行时启动后激发。
Stopped当workflow运行时停止后激发。
WorkflowCompleted当一个workflow实例完成后激发。
WorkflowIdled当一个workflow实例进入空闲状态时激发。当workflow实例进入了空闲状态后,你就有机会把他们从内存中卸载掉、存储到数据库并可在稍后的时间把它们加载进内存。
WorkflowTerminated当一个workflow实例被终止后激发。在宿主中调用一个workflow实例的Terminate方法、或通过一个Terminate活动、或当workflow运行时产生一个未经捕获的异常时都会终止该workflow

 2. WorkflowFactory.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Workflow.Runtime;

namespace WorkflowHost
{
    
public static class WorkflowFactory
    
{
        
//workflow runtime的单一实例
        private static WorkflowRuntime _workflowRuntime = null;
        
private static object _syncRoot = new object();
        
//工厂方法
        public static WorkflowRuntime GetWorkflowRuntime()
        
{
            
//多线程环境下防止并发访问
            lock (_syncRoot)
            
{
                
if (null == _workflowRuntime)
                
{
                    AppDomain.CurrentDomain.ProcessExit 
+= new EventHandler(StopWorkflowRuntime);
                    AppDomain.CurrentDomain.DomainUnload 
+= new EventHandler(StopWorkflowRuntime);
                    _workflowRuntime 
= new WorkflowRuntime();
                    _workflowRuntime.StartRuntime();
                }

            }

            
return _workflowRuntime;
        }

        
static void StopWorkflowRuntime(object sender, EventArgs e)
        
{
            
if (_workflowRuntime != null)
            
{
                
if (_workflowRuntime.IsStarted)
                
{
                    
try
                    
{
                        _workflowRuntime.StopRuntime();
                    }

                    
catch (ObjectDisposedException)
                    
{
                    }

                }

            }

        }

    }

}

转载于:https://www.cnblogs.com/Ken-Cai/archive/2010/01/21/1653404.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值