转:WorkFlow介绍

不管微软的广告怎么说,WWF这个东西实际上是一个可视化的编程语言,顺便送了你一个编辑WWF的WPF控件。你可以把这个控件集成到你的程序里,然后让甲方的苦力们在公司实现各种“策略”,譬如说“晚婚妇女买安全套八折”这样的东西。

 

顺便,msbuild也是用WWF来管理的。譬如说你想在TFS里面实现checkin后自动运行unit test,就在BuildProcessTemplates目录下面的xaml文件里面,打开VS改里面的Workflow(用WWF搞的),拖拉几下就搞定了。

 

转:http://blog.csdn.net/wanghom8228/article/details/3229887

 

我们为什么需要Windows Workflow Foundation?

今年10月的时候在北京的微软MVP大会上我做了一个关于.NET Framework 4.0中的Workflow的讲座。一场讲座下来给我明显的感觉的大部分的工程师对Windows Workflow Foundation并不是很了解,有一位MVP问我说:“你提到的这些功能,我用写代码的方式都能够实现啊?为什么我需要用工作流?”
  我相信,抱有这样的一个想法的人并不是个别。从2006年底发布了.NET 3.0以来,已经两年过去了,在这个两年中WPF吸引了无数人的眼球,WCF也得到了不少用户的肯定,为什么Workflow一直无法得到广泛的推广。个人认为除了我们产品不够完善以外,主要的原因是因为Workflow实际上引入了一种新的编程方式。有别于传统的编程方式,如果你是一个刚刚接触程序设计的初学者,或者你没有经历过大型的工程开发,那么你并不是很容易理解Workflow给我们带来的好处。相反,我相信那些在一堆业务逻辑和执行代码中挣扎的朋友们会很容易体会一个好用的工作流平台能到来的编程效率提升。
  说了怎么多的废话,让我们来看看什么是Workflow?
  简单的说一个完整得工作流平台(Workflow Foundation)由3个部分组成: Activity(活动),Runtime(运行时)和Tooling(开发工具)。所以在我的团队里,我们将称为A.R.T——艺术。
Activity是工作流的一个工作单位,几个小的Activity能够组合在一起成为一个大的Activity,从而完成更复杂的逻辑。而一个顶层的Activity被称为工作流(Workflow),就像程序中的Main函数。
WF Runtime是Activity的执行平台,WF Runtime可以被托管在.NET的应用程序中,比如IIS。就像我们在运行.NET程序是,CLR会帮助我们管理内存,我们在WF Runtime中运行Activity时,Runtime也会帮我们关系进行诸如应用程序持久化,日志记录,数据追踪方面的工作。
大部分人可能会将Tooling理解为Visual Stuido中的工作流设计器。对,它是Tooling的一部分,但是一个好的开发工具还应该提供了调试功能,你将可以在设计器中更加直观的调试你的工作流。并且你还应该能够将Visual Studio 中支持设计器的在别的平台是使用,比如Web Page或者一个WinForm的程序上。 我们将它称为Rehosting。
  那我们为什么需要Workflow呢?
  总来来说Workflow是为了简化协调工作而产生的,让我们来看个例子。
  我们有这样一段代码,用于实现一个银行帐户的验证

  1. {
  2.     string user = Console.ReadLine();       // 读取用户名
  3.     string account = Console.ReadLine();    // 读取帐户
  4.     CheckAccount(user, account);            // 验证帐户
  5. }

首先我们要求用户输入用户名,输入帐户之后便调用验证函数。这一切看起来都很完美似乎没Workflow什么事情。但是现在我们需要在Web建立这个程序,也许你要有页面用于输入用户名,一个页面用户输入帐号,最后在进行验证。那么你就需要建立3个函数,一个用于读取用户名,一个用于读取帐号,另一个用于验证。因为你将3个函数的逻辑分开了,那么你需要一个变量来保存当前是在输入用户名还是在输入帐号,当然你还需要添加代码来判断是否当前处于正确的状态。不可避免的,你还要添加若干代码来完成不同状态的转换。更糟糕的是你也许希望用户在关闭浏览器后重新登陆不需要再次输入用户名或帐号,那么你又将添加大段的代码来建立你的数据表,并把将这些所有数据储存在数据库。
  而如果使用Workflow,你只要将把3个函数封装在不同的Activity中,并把它们依次放到Sequence Activity中。Workflow Runtime会帮你关心当前是什么状态,也会帮你管理各个状态的转换顺序。同时还能帮你完成程序的持久化,你甚至完全不需要关心数据中的表结构是什么样子的,也许你今后添加一个新的函数用于读取密码,你也不需要费尽心思去改变你的数据库结构。如果你已经把三个Activity都设计好了,你的业务设计师(也许他完全不懂得编程),也能通过设计器进行业务流程的改变。
  当然,这只是一个最最小的例子。当你的业务流程变得更加的复杂,Workflow带来的便利也将更加的明显。
  我们简单总结一下工作流带来的好处:
  1. 简化协调工作所带来的额外工作量
  工作流将业务逻辑从具体的实现中剥离出来,使你能够更专注于业务逻辑的建立,而将大量繁琐的工作交给Workflow Runtme来完成。
  2. 应用程序的持久化
  工作流是默认持久化运行的。你不在需要大量的代码来完成以上的工作。
  3. 增强程序的透明性
  因为业务逻辑和具体实现的分离,那怕是一个完全不懂编程的业务分析师也能够看懂你的程序,甚至能够自己改动你的业务逻辑。

 

转:http://blog.csdn.net/wanghom8228/article/details/3286022

建立基于SQL的跟踪服务(SqlTrackingService)

工作流基础(Windows Workflow Foundation)提供了基于SQL的跟踪服务。SqlTrackingService将会把跟踪的数据保存在SQL数据库中。并提供每个类别(Type),每个实例(Instance)的跟踪档案。同时它还提供了一组SqlTrackingQuery的API用于某些场景下的数据查询。
  由于工作流是一个平台组件,我们没有试图在你安装工作流基础的时候设置并默认启用SqlTrackingService,你需要通过简单的步骤来设置并启用它:  

  设置SqlTrackingService

  工作流基础提供了必要的脚本用于建立Schema和数据库对象,你需要:
  1)建立一个数据库命名为Tracking
  2)在你建立的数据库中依次执行C:/WINDOWS/WinFX/v3.0/Windows Workflow Foundation/SQL/EN下的Tracking_Schema.sql和Tracking_Logic.sql

  启用SqlTrackingService
  和任何工作流运行时服务类似,你可以通过代码或者config文件来启用它。


  通过代码
  1)建立你的数据库的连接字符串
  2)建立一个SqlTrackingService实例并在WorkflowRuntime启动前添加到WorkflowRuntime中
  你的代码可能如下(假设你的数据库名文Tracking并在本机): 

  1. private void StartCaseManagementProcess()
  2. {
  3.     WorkflowRuntime workflowRuntime = new WorkflowRuntime();
  4.     string connectionstring =
  5.     "Initial Catalog=Tracking;DataSource=localhost;Integrated Security=SSPI;";
  6.     workflowRuntime.AddService(new SqlTrackingService(connectionstring));
  7.     WorkflowInstance workflowInstance = workflowRuntime.CreateWorkflow(typeof(CaseManagementWorkflow));
  8.     workflowInstance.Start();
  9. }

通过config文件
  1)将SqlTrackingService添加到config文件中

 

 

 

  1. <WorkflowRuntime Name="ConfigSection ">
  2.   <Services>
  3.     <add type="System.Workflow.Runtime.Tracking.SqlTrackingService, System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
  4.          ConnectionString = "Initial Catalog=Tracking;Data Source=localhost;Integrated Security=SSPI;"
  5.          UseDefaultProfile = "true"
  6.          IsTransactional = "true"
  7.          ProfileChangeCheckInterval = "60000"
  8.          PartitionOnCompletion = "false"/>
  9.   </Services>
  10. </WorkflowRuntime>

2)通过配置文件中定义的名字建立你的WorkflowRuntime,代码如下:

    1. WorkflowRuntime workflowRuntime = new WorkflowRuntime("ConfigSection");

 

 

转:http://www.cnblogs.com/zhongkeruanjian/archive/2008/05/03/1180349.html

http://www.cnblogs.com/zhongkeruanjian/archive/2008/05/05/1184171.html

http://www.cnblogs.com/zhongkeruanjian/archive/2008/05/07/1187518.html

http://www.cnblogs.com/zhongkeruanjian/archive/2008/05/11/1192747.html

http://www.cnblogs.com/zhongkeruanjian/archive/2008/05/12/1194186.html

http://www.cnblogs.com/zhongkeruanjian/archive/2008/05/03/1180349.html

Windows Workflow Foundation简述

 

posted @   阿玛  阅读(225)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示