[WF4.0 实战] 事件驱动应用

看到题目或许非常多人都会疑问,为什么要使用事件监听呢?

眼下的认识:

1,使用事件监听能够将工作流的结点返回值返回到client

2,能够实现等待与重新启动,相当于之前的WaitActivity创建BookMark的方式

至于使用WorkflowInvoker或者WorkflowApplication这两种方式临时还没能实现工作流的节点值返回到client。可是对于等待流是能够实现的!

当然要注意的是。假设须要进行事件的监听。则不能使用WorkflowInvoker或者WorkflowApplication来启动流程,而是须要通过WorkflowServiceHost来启动监听(并且这里有个根本差别,WorkflowServiceHost仅仅是启动监听,并不马上创建Workflow的实例)

详细实现:

WF:

拖放一个Receive到PickBranch的Trigger里面(我们设置了这个Receive的ServiceContractName。和OperationName。能够随便取名。没有太多限制。这里事实上是使用了WCF的技术。)

我们能够选择Receive这个Activity,然后在右键菜单中找到Create
SendReply,然后找到合适的位置粘贴就可以。能够生成对应的SendReplyTo,与Receive自己主动关联

那么,我们究竟要发送什么数据给用户呢?能够点击Activity上面的Content这个地方

WCF

新建一个“控制台应用程序”(Host),加入对应的引用

宿主程序(通过代码的方式启动工作流服务)即将工作流作为一种服务公布出去:

namespace Host
{
    class Program
    {
        static void Main(string[] args)
        {
            var host = new WorkflowServiceHost(
                new DocumentReviewLib.DocumentReviewWorkflow(),
                new Uri("http://localhost:8080/DRS"));

            host.AddDefaultEndpoints();
            host.Description.Behaviors.Add(
                new ServiceMetadataBehavior() { HttpGetEnabled = true });

            host.AddServiceEndpoint(
                "IMetadataExchange",
                MetadataExchangeBindings.CreateMexHttpBinding(),
                "mex");

            host.Open();
            Console.WriteLine("Server is ready.");
            Console.Read();

        }
    }
}

点击F5就可以启动服务,在浏览器中能够查看服务

那么将这部做完以后我们client是如何调用我们封装的这么一个工作流的服务呢

我们希望client调用这个工作流的服务呢是一个很松的耦合,那么我们能够用一个很easy的办法,去生成呢对这个服务的一个代理,通过这个代理类来进行调用

生成他的代理类

依据上面页面的提示,我们能够产生一个服务代理类。

注意。要使用Visual Studio Command Prompt。而不是默认的cmd

查看生成的代理类:

当中生成的对应方法为:

 public System.Nullable<int> CreateTicket()
    {
        CreateTicketRequest inValue = new CreateTicketRequest();
        CreateTicketResponse retVal = ((IDocumentReview)(this)).CreateTicket(inValue);
        return [email protected];
    }

WindowsForms:

我们接下来要设计一个Windows Forms的client程序。来使用该服务,发起流程的操作

将刚才工具所生成的两个文件加入到当前项目,而且将output.config改动为app.config

假设client为winform或为wpf那么我们会将这个output改成app.config

怎样client为webform,我们改名为web.config

client调用

相应的代码:

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btCreate_Click(object sender, EventArgs e)
        {
            var proxy = new DocumentReviewClient();
            var result = proxy.CreateTicket();

            lstTickets.Items.Add(result);
        }
    }

执行结果:

附上整个应用程序说明:

以上的演示样例是通过WCF实现的事件驱动方式,使用这样的方式有几种优势:

1:client调用这个工作流的服务是一个很松的耦合(代理)

2:能够实现工作流结点往client返回值

3:也是启动工作流的还有一种方式

总结:

对于学习来说,我们大家都是从不懂到理解更加深刻,或许到如今我们对工作流的理解还存在偏差,还有好多疑问,可是随着学习的不断深入。理解也在不断深入,记得刚開始看关于工作流中的事件驱动时的不理解。但随着不断的学习,我们自己也在不断解决自己的疑问,相信这就是学习的过程!

时间: 2024-10-22 19:51:14

[WF4.0 实战] 事件驱动应用的相关文章

[WF4.0 实战] AutoResetEvent具体解释(线程独占訪问资源)

由来: 在学习工作流的过程中,宿主程序中会出现这么一段代码: staticAutoResetEvent instanceUnloaded = new AutoResetEvent(false); 然后就是在方法中这样使用: instanceUnloaded.Set();//将事件状态设置为终止状态.同意一个或多个等待线程继续 instanceUnloaded.WaitOne();//对于WaitOne方法为阻止当前线程,直到收到信号! 对于这部分内容当时不是非常理解,以下我们先介绍一下AutoR

WF4.0实战系列(转载)

http://www.cnblogs.com/zhuqil/archive/2010/07/05/wf4-in-action-index.html

【课程分享】jQuery2.0应用开发:SSH框架整合jQuery2.0实战OA办公自动化(VSS、operamasks-UI框架)

我的qq是2059055336,对这个课程有兴趣的可以加我qq联系. 课程下载地址:链接:http://pan.baidu.com/share/link?shareid=395438909&uk=3611155194 密码:mlvl 课程下载地址:http://www.kuaipan.cn/file/id_192202874577496484.htm?source=1 一.本课程是怎么样的一门课程(全面介绍)    1.1.课程的背景 jQuery 2.0 正式版发布,不在支持 IE 6/7/8

jQuery2.0应用开发:SSH框架整合jQuery2.0实战OA办公自动化(VSS、operamasks-UI框架)

我的qq是2059055336,对这个课程有兴趣的可以加我qq联系. 一.本课程是怎么样的一门课程(全面介绍)    1.1.课程的背景 jQuery 2.0 正式版发布,不在支持 IE 6/7/8 浏览器.因此该版本更小.更快.       为了提高现代社会人们的办公效率,满足人们自动化办公的需要,我们开发了这套稳定可靠.操作方便.安全有效的MyOffice系统     1.2.课程内容简介       本课程全面详细的介绍jQuery2.0以及OA办公自动化系统的开发流程.其中重点详细的介绍

Advanced Installer 11.0实战教程

Advanced Installer11.0实战教程 一个windows服务文件,打包成为一个安装程序,安装后可以自动启动服务:并且在桌面上建立快捷方式,用于查看日志文件及安装目录. 1.新建专业的项目工程. 2.输入产品名称等信息 其中产品名称后面作为安装目录的名称: 3.输入安装参数 应用程序的文件夹等: 4.输入安装条件 本示例中需要.netframework2.0程序,选择后会自动下载必要的程序. 5.设置启动条件 6.设置文件 这里可以选择安装程序需要的文件,本示例有四个文件.同时可以

WF4.0 基础篇 (一) 开始使用WF——下篇

创建WF4.0项目 1.打开VS2010 ,[File] -> [New] -> [Project] 2.在出现的[New Project]对话框的[Installed Templates]树上选[Workflow],在出现的模板列表框中选[Workflow Console Application]项 在[Name]框中输入[helloWorkflow],点击[OK]进入WF4.0项目的设计界面 创建一个"hello wxwinter"屏幕的输出的工作流 按[F5]运行程,

全流程开发 TP6.0实战高并发电商服务系统

第1章 课程简介[PHP行情分析]本章主要讲解本课程的主线, 导学内容,PHP行情分析等让同学们对当前PHP发展充满信心等,同时还分析了企业级开发流程以及规范说明,让同学们对中大型公司的敏捷开发有一个初步认知. 第2章 环境及框架准备[必备基础]本章主要讲解环境的安装,通过composer获取TP6源码,nginx的配置等工作,环境是我们一切学习的根源,造起来. 第3章 TP6基础知识[新框架]本章主要讲解了TP5/TP6异同之处,基础的控制器层.模型层的使用,杜绝无效请求让代码更加健壮,数据库

WF4.0 事件驱动应用

看到题目也许很多人都会疑问,为什么要使用事件监听呢? 目前的认识: 1,使用事件监听可以将工作流的结点返回值返回到客户端 2,可以实现等待与重启,相当于之前的WaitActivity创建BookMark的方式 至于使用WorkflowInvoker或者WorkflowApplication这两种方式暂时还没能实现工作流的节点值返回到客户端.但是对于等待流是可以实现的! 当然要注意的是,如果需要进行事件的监听,则不能使用WorkflowInvoker或者WorkflowApplication来启动

ActiveMQ5.0实战三:使用Spring发送,消费topic和queue消息

实战一 , 实战二 介绍了ActiveMQ的基本概念和配置方式. 本篇将通过一个实例介绍使用spring发送,消费topic, queue类型消息的方法. 不懂topic和queue的google 之. 如图示, TOPIC和QUEUE分别代表一个topic和一个queue消息通道. TopicMessageProducer向topic发送消息, TopicConsumerA和TopicConsumerB则从topic消费消息. QueueMessageProducer向Queue发送消息, Q