博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[WF4.0 实战] 事件驱动应用
阅读量:5970 次
发布时间:2019-06-19

本文共 2658 字,大约阅读时间需要 8 分钟。

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

 

 

眼下的认识:

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

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

 

至于使用WorkflowInvokerWorkflowApplication这两种方式临时还没能实现工作流的节点值返回到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
CreateTicket() { CreateTicketRequest inValue = new CreateTicketRequest(); CreateTicketResponse retVal = ((IDocumentReview)(this)).CreateTicket(inValue); return retVal.@int; }

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:也是启动工作流的还有一种方式

 

总结:

 

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

你可能感兴趣的文章
×××安全协议之IPsec
查看>>
用Unity3D的50个技巧:Unity3D最佳实践
查看>>
记录:C#编程中的字符串
查看>>
NEO从源码分析看NEOVM
查看>>
我的友情链接
查看>>
java中的匿名内部类总结
查看>>
多线程(一、线程安全案例)
查看>>
mysql之DDL操作--数据库
查看>>
java json格式的转换和读取
查看>>
find的命令的使用和文件名的后缀
查看>>
恢复WORD2010的默认模板2011-05-03
查看>>
Test2 unit2
查看>>
shell脚本逻辑判断,文件目录属性判断,if,case用法
查看>>
我的友情链接
查看>>
一个用了统计CPU 内存 硬盘 使用率的shell脚本
查看>>
如何恢复默认域策略和默认域控制器策略
查看>>
Nginx配置文件nginx.conf (Apache)
查看>>
jquery和JavaScript区别
查看>>
pxe方式安装gentoo
查看>>
Project Management Library项目管理甘特图控件
查看>>