一起学WF3.5【14】

宿主把数据发送给一个已执行的工作流来说,也涉及到本地通信服务、事件及为处理这些事件的事件处理程序。为宿主和工作流之间设计好了进行通信所要使用的接口,接口中所添加的方法就是被工作流用来把数据发送给宿主的方法。在该接口中添加的事件能使宿主把数据发送给已经开始执行的工作流。

本例将创建一个WinForm程序。该程序将模拟股票的价格监视并进行交易。用户可添加一支股票,它可让工作流知道如果该股票未被监视到则要进行监视。可以使用AddRemove按钮模拟股票的添加和删除。输入完成后点击OK,这个新的要被监视的股票就被添加进被监视股票的列表中。正监视的股票被保存在应用的Setting文件中(XML)格式以便下一次执行启用。

假如你后来想要修正股份的数量,可将股票买进或卖出。添加、移除、买进和卖出都可以触发一个到工作流的事件。

首先完成工作流和宿主将用来进行通信的接口,然后你要用wce.exe工具来创建继承自CallExternalMethodHandleExternalEvent的一组活动。

创建通信接口

程序只需要一个方法把市场价格信息返回到用户界面上,命名为MarketUpdate。还需要5个分别名为AddTickerRemoveTickerBuyStockSellStockStop的事件来驱动工作流。它们都放在一个接口中。接口名称为IWFBroker

void MarketUpdate(string xmlMarketValues);

       eventEventHandler<TickerActionEventArgs> AddTicker;

       eventEventHandler<TickerActionEventArgs> RemoveTicker;

       eventEventHandler<SharesActionEventArgs> BuyStock;

       eventEventHandler<SharesActionEventArgs> SellStock;

       eventEventHandler<StopActionEventArgs> Stop;

MarketUpdateEventArgsStopActionEventArgs都是ExternalDataEventArgs的增强类型,不传送数据。但TickerActionEventArgsSharesActionEventArgs都传送数据给工作流。TickerActionEventArgs承载要添加和移除的股票的XML数据。而SharesActionEventArgs承载作为主键的股票代码及买卖的股票数目。

同样的需要我们创建外部数据服务,包括一个桥接器类和一个桥接服务类。分别名为BrokerDataConnectorWorkflowBrokerDataService。具体详细代码请见附件。

创建通信活动

同样进行eBrokerService的工程的bin目录。使用wca工具将被解析的方法生成派生自CallExternalMethod活动的类,放入IWFBroker.Invoke.cs;也将那些事件生成派生自HandleExternalEvent活动的类放入IWFBroker.Sinks.cs。把这两个生成的文件重命名为ExternalMethodActivities.csExternalEventHandler.cs,并复制到接下来的工作流项目中,工作流项目成功编译后,工具箱中将出现AddTickerBuyStock等自定义活动。

创建broker工作流

解决方案中添加一个顺序工作流项目名为eBrokerWorkflow

拖一个Code活动到设计设计界面上。ExecuteCode属性设置为Initialize

拖一个EventHandlingScope活动到工作流设计器上。需要提供一个事件处理程序及一个子活动,以便让它监听事件时执行。在EventHandlingScope活动上,根据智能提示选择查看事件处理程序,拖一个EventDriven活动到里面。

拖一个生成的Stop活动到EventDriven活动里。在监听到的Stop活动触发时将要执行一个子活动。在EventHandlingScope活动里选查看EventHandlingScope,拖一个While活动到设计界面上。指定它的Condition属性为代码条件,指定名称为TestContinue

拖一个Sequence活动到While活动中。拖一个Code活动到Sequence活动中,对股票价值进行模拟,指定它的ExecuteCode属性为UpdateMarketValues

为了把值传给宿主,把MarketUpdate活动拖入到Code活动的下面。把它的xmlMarketValues属性的选择按钮打开,创建一个新属性名为Updates

为了能处理来自宿主的事件,拖一个    Listen活动到Sequence活动中。还需要拖3EventDriven活动到其中,对应我们除了Stop事件的其他四个事件,最后一个EventDriven活动用来在延时一段时间后结束该工作流,然后While活动对执行条件进行检测判断,而这个条件总被设置为true以使While活动不停循环。在股票价值被更新并发送给宿主后,Listen活动又对新一轮来自宿主的事件进行监听。

最右边的EventDriven活动,拖一个Delay活动进去并命名为updateDelay

拖一个SellStock活动到右边第二个活动中。把它的NumberOfShares属性绑定到名为_sharesToSell的新字段中。把它的Symbol属性绑定到一个名为_tickerToSell的新字段上。再拖一个Code活动到SellStock活动下面以卖出股票,它的ExecuteCode属性设置为SellStock

按照上述步骤把BuyStock活动拖入,NumberOfShares绑定到一个新字段,名称为_sharesToBuy,同样把它的Symbol属性也绑定到一个新字段,名为_tickerToBuy。同样放一个Code活动,ExecuteCode属性设置为BuyStock

重复以上步骤以添加RemoveTickerAddTicker事件到Listen活动中。RemoveTicker活动的TickerXML属性绑定到一个新字段,名为_tickerToRemvoe,为RemoveTicker事件添加的Code活动的ExecuteCode属性为RemoveTicker。同样,AddTicker活动的TickerXML属性要绑定到_tickerToAdd,和它相联系的Code活动的ExecuteCode活动属性指定为AddTicker

至此,工作流设计完成,现在添加必要的代码。

首先需要一些初始化代码,当工作流启动时,要把一个以股票代码为关键字的若干股票信息的集合的数据字典传给该工作流;也需要指定一个轮询间隔,它是再一次对股票市值进行检测前工作流所要等待的时间值。(代码略,见附件)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows Workflow Foundation (WF) is a revolutionary part of the .NET 4 Framework that allows you to orchestrate human and system interactions as a series of workflows that can be easily mapped, analyzed, adjusted, and implemented. As business problems become more complex, the need for a workflow-based solution has never been more evident. WF provides a simple and consistent way to model and implement complex problems. As a developer, you focus on developing the business logic for individual workflow tasks. The runtime handles the execution of those tasks after they have been composed into a workflow. Pro WF: Windows Workflow in .NET 4.0 provides you with the skills you need to incorporate WF in your applications, using a lively tutorial style with each example illustrated in C#. This book gets you up to speed with WF 4.0 quickly and comprehensively. Learn about WF 4.0's new designer, it's updated programming paradigm, and the completely new set of activities that can enable and extend your workflows. This book also includes detailed coverage of how to customize your workflows and access them in a variety of ways and situations so you can maximize the advantages of this technology. What you'll learn WF 4.0 basics New activities and changes to existing activities in WF 4.0 Customizing your workflows Accessing your workflows in a variety of ways in a variety of situations Using WF with Web Services and ASP.NET Integrating WCF and WF Who is this book for? This book is for intermediate to advanced .NET developers who need to learn how to use the latest version of Windows Workflow Foundation (WF 4.0). This book is not a primer on .NET or the C# language. To get the most out of the examples presented in this book, it is necessary to have a good working knowledge of .NET 2.0 or higher. All of the examples are presented in C#.
坚持WF(1):从HelloWorld开始 本文主要通过实现了一个可以接受参数的HelloWorld程序来了解WF。 坚持WF(2):WF创作模式和设计时工具 坚持WF(3):WF框架概览 2.3两篇主要全面的阐述了WF框架和Visual Studio对开发WF的一些设计时的工具。 坚持WF(4):活动(Activity)和依赖属性(DependencyProperty) 坚持WF(5):自定义活动(CustomActivity) 4.5两篇对主要对活动(Actibity)的介绍和依赖属性(DependencyObject)和DependencyProperty事件的使用。 坚持WF(6):开发可复用的宿主程序 主要实现两个类来对WorkflowInstance和WorkflowRuntime进行简单的封装。 坚持WF(7):流程控制(Flow Control) 主要说了WF中和流程相关的活动,主要包括以下这些活动:IfElseActivity,WhileActivity,ParallelActivity,ReplicatorActivity,ConditionedActivityGroup,InvokeWorkflowActivity,TerminateActivity,SuspendActivity等。 坚持WF(8):本地服务之调用外部方法 坚持WF(9):本地服务之事件处理 工作流能够使用方法和事件通过消息与宿主程序交互。 事件用于将数据发送到工作流,而工作流使用方法将数据发送到主机应用程序,8.9两篇主要说了本地服务如何调用外部方法和接收事件。 坚持WF(10):在工作流中使用关联 当工作流实例在本地服务接口上侦听相同事件的不同实例时,就无法确定该响应哪个事件。如何解决这个问题呢,我们就需要在工作流中使用关联。 坚持WF(11):工作流通信与队列 WF 提供的通信模型是构建于队列系统的基础之上,我们可以使用自定义活动来注册以接收关于队列的消息,而宿主应用程序中的服务则发送关于队列的消息。自定义活动可以使用此模型来处理外部事件,也可以传递异步活动执行的完成。这样,您的活动可以先执行到某一点,然后等待激发因素的到来以便继续执行。 坚持WF(12):使用EventHandlingScopeActivity活动 EventHandlingScopeActivity活动包含一个主线子活动和一组事件处理活动(EventHandlersActivity),它的主线子活动中只能包含一个子活动。它会执行其主子活动比如SequenceActivity。 同时,可能会执行每个EventDrivenActivity,也可能不执行它们,这取决于在SequenceActivity 活动执行时是否发生了它们的事件,当主线活动执行完了整个EventHandlingScopeActivity活动也就结束了。 坚持WF(13):WF中的持久化服务 主要介绍了如何使用WF中提供的SqlWorkflowPersistenceService来进行持久化存储。 坚持WF(14):自定义持久化服务 我们除了使用WF提供的SqlWorkflowPersistenceService外,还可以自定义持久化服务。因为有的时候你可能不想使用Sql Server数据库,我们就可以通过自定义持久化服务来使用其他的数据库,文件等来进行持久化存储。 坚持WF(15):状态机工作流 本文主要介绍WF中状态机工作流的基础知识,状态机工作流和顺序型工作流不同。顺序型工作流一般是比较固定的,可预测的,和系统交互的时候比较多。而状态机工作流一般是不可预测,和人的交互会比较多一些,一般有回退流程的时候使用状态机工作流会比较好一点,如何正确的选择顺序型工作流还是状态机工作流是十分重要的。 坚持WF(16):WF中的事务 在关系型数据库中支持事务已经有10几年了,事务用来解决数据的完整性、一致性等等问题。在WF中提供了TransactionScopeActivity活动用来支持事务,当该活动执行时一个System.Transactions.Transaction实例就被创建了,如果TransactionScopeActivity中的子活动有一个有异常,就会执行回滚操作。 坚持WF(17):WF中的补偿 事务是你在做一组更新时要不成功,要不失败,不可能只部分更新。事务最经典的使用场合就是在关系型数据库中。补偿是取消之前已经成功的操作,在我们的工作流中我们可能完成一项任务有很多活动组成,比如我们的活动都使用了TransactionScopeActivity,我们在之后发现错误了,想要取消之前成功的操作,这个和事务就没有关系了,因为事务已经成功了。这个时候我们就可以使用补偿。 坚持WF(18):使用IPendingWork接口 WF会定期在各个持久性点(Persistence Point)检查并将工作流实例保存到持久化存储中,这样如果工作流出现错误或是异常终止时相关的信息就会被存储,下次加载工作流实例时就会从此做为开始点。这个主要是针对工作内置的服务。工作流的外部服务使用工作批次来保留状态信息。 这些服务对其工作项进行批处理并共享与工作流的事务相同的事务。 如果工作流尚未提交事务,则服务仍可以在持久点期间对某些工作项进行批处理。WF提供 IWorkBatch 和 IPendingWork 以帮助服务和工作流实例保留状态信息。 坚持WF(19):工作流线程 WF中提供了很多内置的服务,其中工作流计划服务是用来管理工作流实例线程的。默认情况下WF会自动使用DefaultWorkflowSchedulerService服务,我们还可以手动去加载ManualWorkflowSchedulerService服务。本文利用MSDN中的一个例子来说明工作流中的线程以及如何使用DefaultWorkflowSchedulerService和ManualWorkflowSchedulerService服务。 坚持WF(20):规则引擎中的活动条件 坚持WF(21):规则引擎中的RuleSet 坚持WF(22):跟踪规则 坚持WF(23):以代码的方式构造和执行RuleSet WF提供了非常灵活,强大和简单易懂的规则引擎。这几篇文章介绍了WF中规则引擎的相关知识。 坚持WF(24):WF中的异常处理 坚持WF(25):取消容器(CancellationHandlerActivity) 说明了WF如果捕获和处理异常,并介绍了CancellationHandlerActivity活动的基本使用。 .
Framework 3.5安装包是用于安装和升级Microsoft .NET Framework 3.5的软件包。Microsoft .NET Framework是一种由微软开发的用于构建和运行应用程序的开发平台。.NET Framework 3.5是.NET Framework的一个较早版本,它包含了一些新的功能和改进,以提供更好的应用程序开发和执行性能。 当我们需要在计算机上运行使用.NET Framework 3.5开发的应用程序时,我们需要先安装.NET Framework 3.5的运行环境。安装包提供了一个简便的方式来安装.NET Framework 3.5,它可以从Microsoft官方网站上下载。 安装.NET Framework 3.5的过程相对简单。首先,我们需要下载安装包并运行它。在运行安装包后,它会自动检测计算机的操作系统版本和配置。然后,它会下载和安装.NET Framework 3.5所需的文件和组件。这个过程可能需要一些时间,具体时间取决于计算机的性能和网络连接速度。 安装完成后,我们可以在计算机上运行使用.NET Framework 3.5开发的应用程序。这些应用程序可以利用.NET Framework 3.5的许多功能,如Windows Presentation Foundation(WPF)、Windows Communication Foundation(WCF)和Windows Workflow Foundation(WF)。同时,.NET Framework 3.5还支持许多编程语言,如C#、VB.NET和F#。 总之,Framework 3.5安装包是用于安装和升级.NET Framework 3.5的软件包。它为计算机提供了.NET Framework 3.5的运行环境,使我们能够运行使用.NET Framework 3.5开发的应用程序。安装过程相对简单,并且安装完成后,我们可以充分利用.NET Framework 3.5的各种功能和优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值