《WF编程》系列之43 – 承载工作流:持久性服务 Persistence Services
工作流在长时间运行时难免会遇到一些问题,许多业务逻辑需要花费数日、数周乃至数月。在这段时间中,我们不能让工作流实例一直驻留在内存中(比如,我们需要一份开支报告,而不巧的是对此负责的会计师却在西班牙海滩休假,怎么办呢?)。在Windows Workflow中,可以通过持久化服务来解决长时间运行的工作流可能遇到的问题。
工作流在长时间运行时难免会遇到一些问题,许多业务逻辑需要花费数日、数周乃至数月。在这段时间中,我们不能让工作流实例一直驻留在内存中(比如,我们需要一份开支报告,而不巧的是对此负责的会计师却在西班牙海滩休假,怎么办呢?)。在Windows Workflow中,可以通过持久化服务来解决长时间运行的工作流可能遇到的问题。
Windows Workflow 其实是一个Runtime,而不是应用程序。在启动工作流之前,宿主进程必须先加载并运行工作流Runtime。宿主进程告诉Runtime要创建什么类型的工作流,Runtime则负责管理工作流的生命周期并通知宿主进程重要的生命周期事件,比如工作流的完成和终结。Runtime并不挑剔它的宿主,宿主可以是台式机上的智能客户端应用程序,也可以是机架上的服务器中运行的ASP.NET进程。所有宿主进程需要做的只是加载.NET 3.0工作流程序集而已。
像CallExternalMethod活动一样,HandleExternalEvent活动也有一个必须设置的InterfaceType属性。
本文来介绍如何编写一个宿主来执行工作流.
本例中的服务只需要提供IBugFlowService接口的实现即可.它将作为宿主和bug跟踪工作流之间的桥梁.
许多开发人员想要建立一个更加正式的机制来方便和工作流交互.尽管使用Dictionary可以简单灵活的向工作流传递数据,但这种方法需要参数名称和伴随属性的严格匹配.而且我们只可以在工作流开始时使用参数向工作流传递数据,或在结束是获取数据.许多工作流需要在执行过程的不同时期和宿主交换数据.我们可以使用事件和方法调用来达到这个目的.这一节,我们来讨论数据传输通信的基本原理.
对许多工作流来说,有一个重要的步骤是决定工作流与应用程序之间如何交互.我们如何得知工作流是否顺利完成?如何从运行中的工作流实例获取数据?如何获取已经完成的工作流的数据?这一节,我们来介绍一些解决这些问题的基本技术原理.
在Windows Workflow中,活动可以视作提交给工作流处理器执行的指令或代码,而这个工作流处理器就是WF Runtime.为了启动工作流,我们必须托管Runtime与工作流服务.