WF4.0中四种自定义类型活动

工作流中的活动就像用户自定义的控件,将许多的功能封装起来用。WF4.0中提供了四种可继承的活动 类:CodeActivity 、AsyncCodeActivity、Activity、NativeActivity。这几种活动都有自己使用的适合 场合,正确的使用这些活动将非常有利。

1、CodeActivity

WF4.0中的活动是树形结构的,创建叶子活动最简单是方式就是使用CodeActivity ,它的逻辑都放在 一个方法:Execute 里面,这个也是四种活动中最简单的一种。这里用一个简单的自定活动HttpGet来说 明怎么使用CodeActivity。HttpGet的功能是从网络上抓取数据。

public sealed class HttpGet : CodeActivity<string>
     {
         public InArgument<string> Uri { get; set; }
         protected override string Execute(CodeActivityContext context)
         {
             WebRequest request = HttpWebRequest.Create(this.Uri.Get (context));
             using (WebResponse response = request.GetResponse())
             {
                 //read everything response.GetResponseStream() as one  string
                 using (StreamReader reader = new StreamReader (response.GetResponseStream()))
                 {
                     return reader.ReadToEnd();
                 }
             }
         }
     }

public InArgument<string> Uri { get; set; }是工作流中的一个属性,相当于类的属性,不 过取它的值与类有点不同,你需要使用:Uri.Get(context))或者 context.GetValue(Uri),Execute方法 是这个活动的逻辑,特别注意CodeActivityContext context参数,这是WF的上下文,非常有用。

如何使用这个活动:

HttpGet fetchMsn = new HttpGet
      {
          Uri = "http://www.msn.com"
      };
      string msnContent = WorkflowInvoker.Invoke<string>(fetchMsn);
      Console.WriteLine(msnContent);

2、AsyncCodeActivity

AsyncCodeActivity 类似CodeActivity ,只是它是使用了 Begin/EndExecute 取代了CodeActivity 的Execute 方法。BeginExecute 开始一个异步操作,无需等待它完成,就返回IAsyncResult对象 。当这 个操作完成的时候,就执行EndExecute 方法放回结果。HttpGet 能这样实现,请注意 CodeActivityContext换成了AsyncCodeActivityContext:

class HttpGet : AsyncCodeActivity<string>
     {
         public InArgument<string> Uri { get; set; }
         protected override IAsyncResult BeginExecute(AsyncCodeActivityContext  context, AsyncCallback callback, object state)
         {
             WebRequest request = HttpWebRequest.Create(this.Uri.Get (context));
             context.UserState = request;
             return request.BeginGetResponse(callback, state);
         }
         protected override string EndExecute(AsyncCodeActivityContext  context, IAsyncResult result)
         {
             WebRequest request = (WebRequest)context.UserState;
             using (WebResponse response = request.EndGetResponse (result))
             {
                 using (StreamReader reader = new StreamReader (response.GetResponseStream()))
                 {
                     return reader.ReadToEnd();
                 }
             }
         }
     }

时间: 2024-11-30 12:24:57

WF4.0中四种自定义类型活动的相关文章

Excel中四种常用类型图表的创建方法

Excel中四种常用类型图表的创建方法   上图中的四种不同类型的图表都是根据同一个表格创建的,也就是说,这四种常用的图表是没有特定的数据限制的. 一.创建柱形图 1.将光标定位到要创建图表的数据区域内,然后切换到"插入"选项卡,在"图表"组的"柱形图"下选择一种需要的柱形图类型进行创建. 2.现在工作表中已经插入了一个选择的柱形图. 二.创建条形图 1.将光标定位到表格区域内,然后选择一个合适的条形图类型进行创建. 2.现在工作表中已经插入了一

四种定制类型

四种定制类型 王大勇将定制电影分为四种类型. 第一种是企业文化传播, 公司2008年出品的电影 <志愿者> 就是典型代表. 安利公司希望借电影 <志愿者> 塑造公司积极参与志愿活动的公益形象, 以提升公众对公司的好感度, 扭转直销企业的负面形象. 作品所涉题材本身不够市场化, 一般很少有影视公司会开发这类项目, 即便有公司涉及, 也未必能完全满足安利在产品. 志愿者理念. 作品的思想性等方面的特殊要求, 因此只有定制形式的电影才能满足企业特殊的宣传需求. 第二种定制电影则专为企业产

c++中四种强制类型转换及区别对比

C++四种强制类型 reinterpret_cast<目标类型>(原类型变量)//重解释类型转换  dynamic_cast<new_type>(expression)//动态类型转换  static_cast<new_type>(expression)//静态类型转换  const_cast<new_type>(expression)//返回一个指向非常量的指针   1.const_cast:常量指针被转化成非常量的指针,并且仍然指向原来的对象:常量引用被

C++中四种类型转换 const_cast是否能改变常量

we have four specific castingoperators:dynamic_cast, reinterpret_cast, static_cast and const_cast. Their format is to follow the new type enclosed between angle-brackets (<>) and immediately after, the expression to be converted between parentheses.

了解Office2007四种文件类型

  很多办公人员都在用Office2007进行书写文件,但是有时候会遇到无法打开某些文件类型的问题.现在让我们一起来了解Office2007支持的四种文件类型,方便大家对文件进行操作. 以前,只有两种 Word 文件类型:文档和模板(.doc 和 .dot). Word 2007 中有四种文件类型:.docx..dotx. .docm 和 .dotm("x"代表 XML,"m"代表宏).表中列出了详细信息. 您可能会发现新 Word 文件格式的唯一显著区别:是否使用

PS中四种描边方式图文介绍

  这篇教程是图文介绍PS中四种描边方式,教程比较简单,希望对大家有所帮助! 教程结束,以上就是PS中四种描边方式图文介绍,希望对大家有所帮助! 分类: PS入门教程

Java中四种XML解析技术之不完全测试

xml 在平时工作中,难免会遇到把XML作为数据存储格式.面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历XML这块来测试,因为遍历XML是工作中使用最多的(至少我认为). 预备 测试环境: AMD毒龙1.4G OC 1.5G.256M DDR333.Windows2000 Server SP4.Sun JDK 1.4.1+Eclipse 2.1+Resin 2.1.8,在Debug模式下测试. XML文件格式如下: <?xml ver

java中四种操作xml方式的比较

xml|比较   1. 介绍 1)DOM(JAXP Crimson解析器)         DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还

Java中四种XML解析技术_JSP编程

在平时工作中,难免会遇到把 XML 作为数据存储格式.面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历 XML 这块来测试,因为遍历 XML 是工作中使用最多的(至少我认为). 预 备 测试环境: AMD 毒龙1.4G OC 1.5G.256M DDR333.Windows2000 Server SP4.Sun JDK 1.4.1+Eclipse 2.1+Resin 2.1.8,在 Debug 模式下测试. XML 文件格式如下: <?