zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Aizu
    Aizu
    POJ
    POJ
    POJ
    UVA
    manacher
    Gym
    Gym
    Gym
  • 原文地址:https://www.cnblogs.com/RuiLei/p/939907.html
Copyright © 2011-2022 走看看