在这章里面只是为你讲述如何将WF与Web Service结合使用,而关于WF的开发的详细介绍请参考(WF技术内幕)。WF与Web Service相互调用分为两情况:
- 当客户只希望传入一些基础数据,而直接获取计算结果时,我们可以将WF发布为一个Web Service,这样就可以将WF实现的功能公开到互联网上,通过Web服务可以解决服务器与客户端之间开发语言的束缚。
- 当工作流的每个操作步骤都需要调用Web服务来获取结果时,我们则可以使用InvokeWebServiceWorkflow在工作流中调用Web Service来实现(具体操作可参考通过InvokeWebServiceActivity在Workflow工作流中调用Web服务 ) 。
namespace Microsoft.IService { public interface IService_T1 { string DoWork(); }
}
然后新建一个顺序工作流,分别插入WebServiceInputActivity和WebServiceOutputActivity作为启动,结束项。WebServiceInputActivity是服务的启动标记,而WebServiceOutputActivity是服务的结束标记。
注意,把webServiceInputActivity1的InActivating设置为True,这是证明webServiceInputActivity1为此工作流的启动项的标志。 然后InterfaceType设置为对应接口,将MethodName方法名设置为DoWork
在工作流的方法中设置codeActivity的执行方法codeActivity1_ExecuteCode,把返回值设置为Hello World。
namespace Microsoft.Workflows
{
public sealed partial class Workflow4 : SequentialWorkflowActivity { public string _returnData; public Workflow4() { InitializeComponent(); } private void codeActivity1_ExecuteCode(object sender, EventArgs e) { _returnData = "Hello World"; } }
}
最后,在webServiceOuputActivity的InputActivity设置为webServiceInputActivity1,把ReturnValue属性设置为_returnData
这时候,基础的设置已经完成,现在在项目属性上选择“作为Web服务发布”。
此时,系统会自动把Workflow发布为*.asmx,生成的.asmx文件如下:
<%@ WebService Class="Microsoft.Workflows.Workflow_WebService " %>
//此处Class名称与Workflow的空间名和类名相对应
再为服务添加必要的配置文件:
//这里是为Workflow添加SQL数据库持久化服务,这是可选设置。
这时候在网络上第一次调用服务时,系统会正常操作。
xml version="1.0" encoding="utf-8" ?>
但第二次调用。系统将提示提示一个错误,这是因为WorkflowWebHostingModle HTTP模块是使用Cookies来存储工作流的GUID的,当工作流在服务器返回时,SQL持久化数据器里将不再储存这个GUID,这时候需要关闭浏览 器,重新启动才能正常运行。
System.InvalidOperationException: 在状态持久性存储中找不到 ID 为“3a8b9688-fb3f-4a10-bb84-6bf99c30119a”的工作流。
总结,通过WF可以轻松企业的业务逻辑,再结合Web Service在互联网上发布,就可以供给不同客户端使用,从而摆脱开发语言的困扰。以上的例子只是将WF发布为Web服务的最基础用法,因为Workflow对象只会暂时存在,当服务结束时,Workflow对象就会被清理。但是很多时候系统可能要求能维持状态并支持多个Web Service调用的工作流,下一章将为你详细介绍有关内容。
热门话题:使用WCF实现SOA面向服务编程(一)——SOA的概念 热门话题:使用WCF实现SOA面向服务编程(二)——实现简单的WCF开发实例 热门话题:使用WCF实现SOA面向服务编程(三)——使用AJAX+WCF服务页面开发 热门话题:使用WCF实现SOA面向服务编程(四)—— 通过Web服务调用Workflow工作流(基础实例) 热门话题:使用WCF实现SOA面向服务编程(五)—— 通过Web服务调用Workflow工作流(开发持久化工作流) 热门话题:使用WCF实现SOA面向服务编程(六)—— 通过InvokeWebServiceActivity在Workflow工作流中调用Web服务 热门话题:使用WCF实现SOA面向服务编程(七)—— WF与WCF互相调用(利用ReceiveActivity把WF发布为WCF)
最新评论