wf工作流java_WF工作流与Web服务的相互调用 —— 通过Web服务调用Workflow工作流(基础实例)...

在开发一个企业ERP系统时,其业务流程是开发的关键,系统往往会将开发好的业务方案发布为Web服务以供外界调用。客户可以通过服务器,互联网等等方式 去调用服务,而解决业务上需要及信息的交换问题。有见及此,微软在.NET 3.0基础上发布了WF,WCF,以及WCS,WPF(为开发表现层而设)。WF,WCF正是解决企业核心问题的关键,通过WF可以轻松地轻松地按照业务 逻辑去实现开发,然后凭借WCF的强大功能把同一服务绑定多个不同的EndPoint,这样客户端与服务与服务器端通讯就不会再受开发语言的影响。

9b6ea94a110ea066964d46ed6f1cd215.png

在这章里面只是为你讲述如何将WF与Web Service结合使用,而关于WF的开发的详细介绍请参考(WF技术内幕 )。WF与Web Service相互调用分为两情况:

当客户只希望传入一些基础数据,而直接获取计算结果时,我们可以将WF发布为一个Web Service,这样就可以将WF实现的功能公开到互联网上,通过Web服务可以解决服务器与客户端之间开发语言的束缚。

当工作流的每个操作步骤都需要调用Web服务来获取结果时,我们则可以使用InvokeWebServiceWorkflow在工作流中调用Web Service来实现(具体操作可参考通过InvokeWebServiceActivity在Workflow工作流中调用Web服务 ) 。

在开发中小型ERP开发初期,往往都会把重点放在业务流程上,只要深入了解企业的业务流程后,将DAL实现为最基础的单表操作,然后就可以轻松地以 WF实现业务层的开发,最后就可以把WF作为服务公布在互联网上(当然在构建中大型系统时,会实现多层开发模式,使用工作流直接去实现业务逻辑,最后以 Web Service方式公开服务)。

而在这里,重点不是介绍ERP的开发,而只是想介绍一下如何将WF公开为Web服务,下面我们还是以“Hello World”为例子。

首先开发一个接口

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.pngView Code

namespaceMicrosoft.IService

{publicinterfaceIService_T1

{stringDoWork();

}

}

然后新建一个顺序工作流,分别插入WebServiceInputActivity和WebServiceOutputActivity作为启动,结束 项。WebServiceInputActivity是服务的启动标记,而WebServiceOutputActivity是服务的结束标记。

6289946ae8c50e827d3f6ddf63afc8b6.png

注意,把webServiceInputActivity1的InActivating设置为True,这是证明webServiceInputActivity1为此工作流的启动项的标志。 然后InterfaceType设置为对应接口Microsoft.IService.IService_T1,将MethodName方法名设置为DoWork

61a4db0472f8e05b47e2a9529cc7b976.png

在工作流的方法中设置codeActivity的执行方法里面设置方法内容

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.pngView Code

namespaceMicrosoft.Workflows

{publicsealedpartialclassWorkflow4 : SequentialWorkflowActivity

{publicstringData ;publicWorkflow4()

{

InitializeComponent();

}privatevoidcodeActivity1_ExecuteCode(objectsender, EventArgs e)

{

Data="Hello World";

}

}

}

最后,在webServiceOuputActivity的InputActivityName设置为 webServiceInputActivity1,表示通过webServiceOutputActivity1来结束 webServiceInputActivity1,然后把ReturnValue属性设置为Data

773a6f969d89f8de14c4d91a64e9c670.png

这时候,基础的设置已经完成,现在在项目属性上选择“作为Web服务发布”。

67591bc8fc2e98fce195efef2d1e5cd9.png

此时,系统会自动把Workflow发布为*.asmx,生成的.asmx文件如下:

//此处Class名称与Workflow的空间名和类名相对应

再为服务添加必要的配置文件:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.pngView Code

<?xml version="1.0"?>//这里是为Workflow添加SQL数据库持久化服务,这是可选设置。

534c4cf9915c1864db9d9c890f7f1901.png

这时候在网络上第一次调用服务时,系统会正常操作。

xml version="1.0" encoding="utf-8"

?>

Hello World

但第二次调用。系统将提示提示一个错误,这是因为WorkflowWebHostingModle

HTTP模块是使用Cookies来存储工作流的GUID的,当工作流在服务器返回时,SQL持久化数据器里将不再储存这个GUID。这时候需要关闭浏览

器,重新启动才能正常运行。

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

总结,通过WF可以轻松企业的业务逻辑,再结合Web

Service在互联网上发布,就可以供给不同客户端使用,从而摆脱开发语言的困扰。以上的例子只是将WF发布为Web服务的最基础用法,因为

Workflow对象只会暂时存在,当服务结束时,Workflow对象就会被清理。但是很多时候系统可能要求能维持状态并支持多个Web

Service调用的工作流,下一章将为你详细介绍有关内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值