WF随笔系列之三 CallExternalMethod Activity 专题

 系列目录:WF随笔系列之三 Out-of-the-Box Activities 专题目录

3.2.1  CallExternalMethod Activity

CallExternalMethod Activity在本地通信服务中是一个重要的组件.
使用此Activity,你必须设置两个属性:

  • InterfaceType: 指定接口用于定义workflow通信的。
  • MethodName: 指定需要调用的方法

引文

     为什么 CallExternalMethod 仅限于调用已知接口的方法?
     原因在于活动不仅仅是代码执行者,而是旨在与 HandleExternalEvent 活动一起实施与本地服务的双向交流。借助 CallExternalMethod 活动,通过将 HandleExternalEvent 活动加入工作流,您可以调用服务方法,处理服务引发的事件。

举例:

1.建立Sequential Workflow 项目

-----拖拽CallExternalMethodActivity放入Workflow

2.建立interface File

3.设置InterfaceType,MethodName属性

   ----设置InterfaceType为InterfaceCode

   ----设置MethodName为interfaceMethod

   ----打印预定的语句"invoke interfaceMethod"

*看下图,这里要注意此句:[Showing interfaces marked with an ExternalDataExchangeAttribute]

CallExternalMethod

如果在Interface中不加[ExternalDataExchange],是不会出现可选择的Interface的.

那为什么要添加[ExternalDataExchange]?

因为对于服务接口是必要的声明,否则不能把服务增加到流程中。

private void callExternalMethodActivity1_MethodInvoking(object sender, EventArgs e)
       
{
           Console.WriteLine(
"执行 CallExternalMethod Activity");
       }
 

Main代码如下:

static void Main()
       
{
           
using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
           
{
               ExternalDataExchangeService dataService 
= new ExternalDataExchangeService();
               workflowRuntime.AddService(dataService);
               dataService.AddService(
new Serivces()); 

               workflowRuntime.StartRuntime(); 

               AutoResetEvent waitHandle 
= new AutoResetEvent(false);
               workflowRuntime.WorkflowCompleted 
+= delegate(object sender, WorkflowCompletedEventArgs e) { waitHandle.Set(); }

               WorkflowInstance instance 
= workflowRuntime.CreateWorkflow(typeof(DemoCallExternalMethodActivity));
               instance.Start(); 

               waitHandle.WaitOne(); 

               workflowRuntime.StopRuntime();
           }

       }
 

       
public class Serivces : InterfaceCode
       
{
           
InterfaceCode Members
       }
 


另外有人问我:为什么经常会把CallExternalMethodActivity,HandleExternalEventactivity结合在一起运用呢?

用常语答:CallExternalMethodActivity属于执行行为

                 HandleExternalEventactivity属于事件行为

所以,执行行为一般都是会触发事件行为的。[属于流程思路的解释]

最后附 CallExternalMethodActivity应用

DEMO下载

CallExternalMethodDemo
原文地址:https://www.cnblogs.com/RuiLei/p/939907.html