您的位置:首页 > 其它

坚持学习WF(3):WF框架概览

2009-08-03 12:29 309 查看
觉得这篇没什么好写的,帽子比较大,说浅了吧没什么东西,说深了又写不完,而且我刚刚研究也深入不到哪去(:-))。WF是一个可扩展的框架并且从下到上、在每个级别都针对可扩展性进行了设计。WF提供一个工作流引擎、一个 .NET 托管 API、运行库服务以及与 Microsoft Visual Studio 2008 集成的可视化设计器和调试器。可使用 Windows Workflow Foundation 来生成并执行同时跨越客户端和服务器的工作流,以及可在所有类型的 .NET 应用程序内部执行的工作流。在网上找了一张比较酷的WF框架图(源自InfoQ):





下面是简单介绍下各个部分:

WF Class Libraries and Framework:

就是WF的基础类库了。

工作流引擎:

表示工作流运行时引擎为工作流提供的可配置执行环境,在WF中由WorkflowRuntime类来完成。每个AppDomain只能建一个WorkflowRuntime实例,因为默认情况下一个应用程序就只有一个AppDomain,如果你的应用程序创建另一个附加的AppDomain那么你可以在创建一个WorkflowRuntime的实例。WorkflowRuntime在宿主中以自已独立的线程运行例,它可以加载多个工作流实例,每个工作流实例在WorkflowRuntime有独立的线程.

Runtime服务:

WF提供的服务主要有两种:core service和local service,core service是微软已经给我们提供好了的,比如持久化服务,跟踪服务等,core service是实现工作和宿主程序通信的所以也叫做数据交换服务,关于如何注册和使用core service和local service以后在说吧,这的东西还不少。

宿主环境:

工作流说白了就是一个程序集(DLL),那必须要有宿主环境,它的宿主环境可以是任何的应用程序,比如控制台的,Windows Form,ASP.NET等,下面的插图显示了如何在一个宿主应用程序的进程中同时承载工作流、活动和工作流运行时引擎(源自MSDN)。





工作流和活动:

工作流是一组存储为模型的名为活动的基本单元,活动用于描述实际进程。 工作流提供了一种方法,用于描述多项短期运行或长期运行的工作之间的执行顺序和依赖关系。 此工作从头到尾地贯穿模型,并且活动可以人工执行或由系统功能执行。在WF中工作流实例由WorkflowInstance来表示。

下面是在坚持学习WF(1):从HelloWorld开始中HelloWorld程序中的代码,将工作流宿主在控制台程序中。

using(WorkflowRuntime workflowRuntime = new WorkflowRuntime())
{
AutoResetEvent waitHandle = new AutoResetEvent(false);
workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e)
{waitHandle.Set();};
workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
{
Console.WriteLine(e.Exception.Message);
waitHandle.Set();
};
WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(HelloWorld.Workflow1));
instance.Start();
waitHandle.WaitOne();
Console.WriteLine("Press any key to exit");
Console.ReadLine();
}
这里主要说下WorkflowRuntime和WorkflowInstance的常用方法:

WorkflowRuntime

StartRuntime()方法:启动引擎。

StopRuntime()方法:停止引擎。

CreateWorkflow()方法:创建工作流实例。

它有一些与引擎状态相关的事件,比如上面代码中的WorkflowCompleted ,WorkflowTerminated 等等。

WorkflowInstance有一些对运行控制的方法Start,Abort,Resume,Terminate等等,这些都可以在MSDN找到,觉得列出来没有什么意义,它有一个InstanceId的属性是得到当前实例GUID,workflow实例使用GUID做为的统一标识。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: