代码改变世界

《WF编程》系列之33 - 基本活动:Web Services

2007-10-22 15:28  Windie Chai  阅读(3252)  评论(4编辑  收藏  举报

4.6 Web Services

今时今日,一个完善的软件无可避免的需要发送或接受SOAP请求,WF也包含了一些围绕Web Services的客户端或者服务器端的活动.

4.6.1 InvokeWebServiceActivity

InvokeWebService活动用来调用一个外部Web Service.当我们把这个活动添加到设计器中时,Visual Studio会弹出熟悉的添加Web引用对话框(就像我们在Visual Studio中添加Web引用到任何.NET项目时一样).我们仅需浏览一个描述Web Service信息的Web Service 描述语言(WSDL)文档.Visual Studio会获取WSDL并为该Web Service生成一个代理类.接着我们可以配置活动需要执行的方法名称,并将其参数绑定到工作流的域或者属性.

WebServiceActivity包含了Invoking和Invoked两个事件,它们分别在调用Web Service之前和之后触发.我们可以使用这些事件来初始化Web Service的参数或者接收Web Service的返回值.

4.6.2 WebServiceInputActivity

WebServiceInput活动允许工作流接收一个Web Service请求.和之前讨论过的本地通信活动类似,使用这个活动之前,我们需要定义一个合同(接口).WebServiceInput活动会实现这个接口.当我们设置了活动的InterfaceType属性之后,我们可以从MethodName属性中选择从接口继承而来的方法,并且可以将其参数绑定到工作流的域或者属性.
Visual Studio 2005 还允许我们右键单击工作流项目并选择发布为Web Service.这个命令将创建一个ASP.NET项目,包含.asmx和web.config文件,此项目会以Web Service的形式作为我们的工作流的宿主.  
只有Workflow Class Library项目才可以发布为Web Service.

4.6.3 WebServiceOutputActivity

WebServiceOutput活动必须和WebServiceInput活动是配对出现,它负责响应来自Web Service的请求.这个活动的InputActivityName属性来选择配对的WebServiceInput活动, 所以我们不能在没有WebServiceInput活动的情况下使用这个活动.设计器会检查配对WebServiceInput活动实现的接口和方法名,并允许我们将ReturnValue属性绑定到工作流的域或属性,而ReturnValue属性就是对于Web Service的响应.  

我们可以使用搭配Listen活动来创建一个可以接受不同请求的Web Service(即包含多个不同方法).


4.6.4 WebServiceFaultActivity

WebServiceFault活动允许我们抛出异常(Runtime会将此异常封装到SOAP异常中).和前边讨论的WebServiceOutput活动类似,WebServiceFault活动也有一个InputActiveName属性,所以它也总是和WebServiceInput活动配对出现.它的Fault属性用来引用我们想要抛出的异常.
参考文章:WF-Activity高级篇-WebService Activity