快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

ag亚官网只为非凡:WF工作流技术内幕 —— 通过Web服务调用Workflow工作流(开发持久化工作流)



假如你曾经认真开拓企业ERP系统或者OA系统,事情流对你来说必然并不陌生。事情流(Workflow)是对事情流程及其各操作步骤之间营业规则的抽象、概括、描述。事情流要办理的主要问题是:为实现某个营业目标,在多个介入者之间,使用谋略机,按某种预定规则自动通报文档、信息或者义务。有见及此,微软在.NET 3.0根基上宣布了WF,WCF,以及WCS(身份验证办理规划),WPF(为开颁发明层而设)。WF恰是办理企业核心问题的关键,经由过程WF可以轻松地轻松地按照营业逻辑去实现开拓,然后把WF宣布为Web办事,这样客户端与办事与办事器端通讯就不会再受开拓说话的影响ag亚官网只为非凡,经由过程Web办事就可以轻松调用WF 去实现营业操作。

下面以一个简单的订单录入系统为例子,为你先容一下若何开拓一个持久化事情流。

首先以实用对象sqlcmd来建立一个本地数据库,打开敕令提示符窗口,输入sqlcom -S localhost\SQLEXPRRESS -E -Q "create database WorkflowPersistence" ,然后打开文件夹\Microsoft.Net\Framework\v3.0\Windows Workflow Foundation\SQL\[Lauguage],里面有2个脚本文件:SqlPersistenceService_Schema.sql 和SqlPersistenceService_Logic.sql ,在数据库上运行ag亚官网只为非凡此脚本文件,数据库就可以成功创建。

实例描述:当第一次加入订单时必要调用Web办事来创建新的Workflow工具实例,创建订单后再多次为订单添加商品,在订单没有提交前,此事情流工具实例会处于一个持久化的状态。假如办事器处于余暇状态下些Workflow工具的有关数据会存储于WorkflowPersitence数据库里面,等待订单提交后,Workflow事情流工具才会停止,Workflow工具的数据就会在数据库中被删除。

这里先定义一个Order类,别忘怀给工具加上Serializable串行化属性

[Serializable]

public class Order

{...}

为Order开拓一个操作类OrderManager,里面包括一个措施AddOrder,当每加入一个Order,措施就会返回新加入Order的ID

public class OrderManager

{

public int AddOrder(Order order)

{..........}

}

现在对应此实例我们先开拓一个接口IService_T1,Start措施表示启动此Workflow事情流,而End表示此ag亚官网只为非凡事情流完结

namespace Microsoft.IService

{

public interfaag亚官网只为非凡ce IService_T1

{

void Start();

int AddOrder(Order order);

void End();

}

}

下图是这个Workflow的完备视图,我们先应用webServiceInputActivity1来启动办事

在这里将webServiceInputActivity1的IsActivating属性设置为True,这意味着以此活动激活此Workflow工具实例,然后把InterfaceType设置为Microsoft.IService.IService_T1,并把MethodName设置为Start,这时刻当客户端调用Start措施时,Workflow工具实例就会被激活。

然后设置WhileActivity的轮回前提(this.IsRepeated==true),这阐明只要IsRepeated的值为True, WhileActivity就可以持续运行,则此Workflow处于持久化状态

现在为listenActivity1设置2个事故驱动活动,在左边的事故驱动活动中,分手加入webServiceInputActivity2, codeActivity1, webServiceOutputActivity1。将webServiceInputActivity2的InterfaceType设置为 Microsoft.IService.IService_T1,再把MethodName设置为AddOrder,将AddOrder措施中的参数order绑定为此Workflow工具中的参数_order (参考完备代码),这样就可以经由过程webServiceInputActivity2调动AddOrder措施。然后在codeActivity的codeActivity_ExecuteCode措施中加入操作代码。

着末经由过程webServiceOutputActivity1停止操作,把InputActivityName属性设ag亚官网只为非凡置为webServiceInputActivity2,将ReturnValue绑定变量id 。这样系统在插入Order后就可以获取AddOrder措施的返回值(int) id。

现在,可以在右边的事故驱动活动中,插入一个webServiceInputActivity3,把InterfaceType设置为Microsoft.IService.IService_T1,把MethodName设置为End,然后添加事故InputReceived的处置惩罚措施webServiceInputActivity3_InputReceived,经由过程此措施把IsRepeate属性设置为false,这样就可以调动此活动来终于轮回,停止此事情流。

此为该Workflow的完备代码:

namespace Microsoft.Workflows

{

public sealed partial class Workflow: SequentialWorkflowActivity

{

public Order _order ;

public int id ;

public bool IsRepeate = true ;

public Workflow2()

{

InitializeComponent();

}

//当调用AddOrder措施时履行此操作,经由过程orderManager工具插入order,着末返回值orderID赋值给此Workflow参数id

private void codeActivity1_ExecuteCode(object sender, EventArgs e)

{

OrderManager orderManager=new OrderManager();

int orderID=orderManager.AddOrder(order);

this.id=orderID;

}

//当调用webServiceInputActivity3活动时,把IsRepeate的值设置为false,这样可以终止轮回给束此事情流工具。

private void webServiceInputActivity3_InputReceived(object sender, EventArgs e)

{

IsRepeate = false;

}

}

}

这时刻右键点击此“项目”,选择 “把此Workflow作为Web宣布”,获得以下ASMX文件

Microsoft.Workflows.Workflow2_WebService.asmx

添加设置设置设备摆设摆设文件

//这里是为Workflow添加SQL数据库持久化办事,由于这里如果测试持久化的事情流,此设置设置设备摆设摆设是必须的。

调用Start措施启动Workflow,然后就可以直接调用AddOrder措施,你会发明与上一篇实例不合的是,在上一篇的例子中,每个实例只容许调用一次,当页面未被从新加载时多次调用就会呈现差错提示。而在这一篇的例子中,AddOrder可以多次调用,并能正常运行,这就证清楚明了你调用的Workflow的实例工具已经一个持久化事情流,当你未调用End停止办事时,此事情流工具都可以正运行。

着末,你可以调用End措施来停止操作,当操作停止后,再调用AddOrder,系统就会呈现差错显示:

System.InvalidOperationException: 在状态持久性存储中找不到 ID 为“3a8b9688-fb3f-4a10-bb84-6bf99c30119a”的事情流。

总结一下,经由过程持久化办事流的开拓,可以维持事情流实例的活动状态,这样就可以经由过程多个Web办事进行互相调用。应用这种技巧来实现基于事情流的利用法度榜样 ,就可以将它们经由过程Web办事公开经客户端,并能保持事情状态。

Web办事和WF可以实现互相调用,在这两章里面,为大年夜家先容若何将事情流宣布为Web办事,下一章将为大年夜家先容经由过程InvokeWebServiceWorkflow在WF里面调用Web办事。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: