`

工作流服务Workflow Service(2):SendActivity

阅读更多

无状态的工作流服务每次调用服务都会创建一个新的工作流实例。无状态的服务在客户端和服务器端不需要上下文交换。而有状态的则需要,
在下面的例子中我们开发一个有状态的工作流服务,我们使用WSHttpContextBinding。

1.首先定义IAddStatefulService接口,代码如下:

namespace CaryWFLib
{
    [ServiceContract]
    public interface IAddStatefulService
    {
        [OperationContract]
        void StartWorkflow();

        [OperationContract]
        Double Add(Double num1, Double num2);       

        [OperationContract]
        void StopWorkflow();
    }
}

2.然后我们设计我们的工作流,我们这次使用状态机工作流,如下图:

 wfwcf1

ReceiveActivity的使用可以参考工作流服务Workflow Service(1):ReceiveActivity这篇文章。

3.我们在IIS中宿主该工作流服务,完成后可以使用如下代码进行测试。

namespace AddStatefulServiceConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            AddStatefulServiceClient client1 = new AddStatefulServiceClient();
            AddStatefulServiceClient client2 = new AddStatefulServiceClient();
            Console.WriteLine("Server endpoint: {0}",client1.Endpoint.Address.ToString());            
            client1.StartWorkflow();
            client2.StartWorkflow();
            double result;
            result = client1.Add(1, 2);
            Console.WriteLine("Client1 计算的结果为: {0}", result);                      
            result = client2.Add(1,2);
            Console.WriteLine("Client2 计算的结果为: {0}", result);            
            client1.StopWorkflow();
            client1.Close();
            client2.StopWorkflow();
            client2.Close();
            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }
    }
}
4.除了使用上面的方法来调用工作流服务,我们还可是使用WF本身提供的SendActivity来调用工作流服务,我们新建一个顺序工作流控制
台项目。在工作流设计器中我们拖入SendActivity,如下图:
wfwcf2 

我们还是像使用ReceiveActivity同样的方式来设置SendActivity的ServiceOperationInfo属性,ChannelToken是每一个SendActivity必须要正确的
设置属性,通道令牌用来指定通道名称、通道范围和用于建立通道的终结点配置名称。Name属性为AddChannel,EndpointName属性为AddEndpoint,
该属性与App.config中的相对应,还有OwnerActivityName属性为SendWorkflow。OwnerActivityName和Nam属性决定WCF使用的通信通道,
我们的例子中所有的SendActivity的ChannelToken都是同样的设置,保证所有的服务操作都使用相同的通道,当相同的通道被使用,服务消息将会
在同一个工作流服务实例交换。

App.config如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <bindings>       
      <wsHttpContextBinding>
        <binding name="AddBindingConfig"
          openTimeout="00:00:30" sendTimeout="00:00:30"
          receiveTimeout="00:00:30" closeTimeout="00:00:30" >
        </binding>
      </wsHttpContextBinding>
    </bindings>
    <client>    
      <endpoint address="http://localhost/CaryWFWCF/AddStatefulServiceWorkflow.svc"       
        binding="WSHttpContextBinding"
        bindingConfiguration="AddBindingConfig"
        contract="CaryWFLib.IAddStatefulService"
        name="AddEndpoint">
        </endpoint>
    </client>
  </system.serviceModel>
</configuration>

5.测试程序如下:

namespace WorkflowConsoleSend
{
    class Program
    {
        static void Main(string[] args)
        {
            using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
            {
                AutoResetEvent waitHandle = new AutoResetEvent(false);
                workflowRuntime.WorkflowCompleted += delegate(
                    object sender, WorkflowCompletedEventArgs e)
                {
                    Console.WriteLine("result is {0}",
                        e.OutputParameters["Result"]);                   
                    waitHandle.Set();
                };
                workflowRuntime.WorkflowTerminated += delegate(
                    object sender, WorkflowTerminatedEventArgs e)
                {
                    Console.WriteLine(e.Exception.Message);
                    waitHandle.Set();
                };

                //create channel manager service in order to manage and
                //reuse WCF channels. 
                workflowRuntime.AddService(new ChannelManagerService());

                Dictionary<String, Object> parameters
                    = new Dictionary<string, object>();
                parameters.Add("Num1", 1);
                parameters.Add("Num2", 2);

                WorkflowInstance instance = workflowRuntime.CreateWorkflow(
                    typeof(WorkflowConsoleSend.SendWorkflow), parameters);
                instance.Start();

                waitHandle.WaitOne();

                Console.WriteLine("Press any key to exit");
                Console.ReadKey();
            }
        }
    }
}

ChannelManagerService 负责根据在活动 ChannelToken 中定义的通道令牌,创建 SendActivity 的通道。

分享到:
评论

相关推荐

    工作流(WorkflowService)WebService接口使用说明.doc

    工作流(WorkflowService)是泛微协同办公系统中一个关键组件,它提供了通过WebService接口与外部业务系统进行数据交互的能力。本使用说明旨在详细介绍如何利用这些接口进行有效的流程管理和任务处理。 1. **检查...

    工作流(WorkflowService)WebService接口使用说明.rar

    工作流(WorkflowService)WebService接口使用说明文档详细阐述了如何在泛微E8和E9版本的Ecology8、Ecology9系统中进行接口开发。这些接口主要用于企业级的工作流管理,提供了一套完整的Web服务解决方案,使得不同...

    《疯狂Workflow讲义:基于Activiti的工作流应用开发》

    《疯狂Workflow讲义:基于Activiti的工作流应用开发》内容概括: 本书是一本介绍Java工作流领域的书,以Activiti为核心,内容囊括了多个流行的企业级Java EE框架,全书主要可分为以下几个部分。 第1部分:对...

    工作流框架workflow

    工作流框架,通常被称为Workflow,是软件开发中的一个重要概念,它涉及到流程自动化、任务管理和业务规则的执行。在本文中,我们将深入探讨工作流框架的核心原理、应用领域以及如何使用和选择适合的工作流框架。 一...

    C#Workflow工作流

    1. **工作流基础概念**:了解工作流的基本元素,如活动(Activity)、工作流(Workflow)和工作流服务(Workflow Service)。 2. **工作流设计**:使用Visual Studio中的工作流设计器,可以直观地拖放活动,构建...

    工作流实例workflow

    工作流(Workflow)是一种自动化业务过程的技术,它用于管理和控制信息在组织内部的流动,确保任务按照预定的规则和步骤有序进行。工作流实例则是这种技术的具体应用,它描述了一个具体的工作流程,包括各个任务的...

    WinFrom的Workflow工作流的Hello World简单实例

    工作流(Workflow)是软件系统中用于自动化处理一系列任务或业务流程的技术,它允许开发者将复杂的业务逻辑分解为可管理的步骤。在Windows Forms(WinForms)应用中集成Workflow,可以构建用户友好的图形界面,同时...

    WorkFlow C++ 工作流图形

    "WorkFlow C++ 工作流图形"是一个专注于在C++环境中实现工作流管理的图形化库。工作流,简单来说,就是一系列按照特定顺序执行的任务或活动,它在企业管理、软件开发、流程自动化等领域中广泛应用。C++作为一门强大...

    工作流(workflow)请假流程实例

    工作流(Workflow)是一种自动化处理任务的技术,它在IT领域被广泛应用,特别是在企业管理、项目协作和数据处理等方面。工作流的核心在于定义并管理业务过程,确保任务按照预设的规则和顺序有效地执行。在这个“请假...

    工作流(workflow)入门实例

    工作流(Workflow)是信息化系统中的一个重要概念,它主要用于描述业务流程自动化的过程。在这个入门实例中,我们将深入了解工作流的基本概念、工作流程的设计与实现,以及如何利用MyActivityLibrary这样的库来支持...

    Hands-on labs Workflow Service

    2. 工作流模型:Workflow 4.0支持多种工作流模型,包括顺序流程、状态机流程和活动流程。这些模型可以帮助开发者根据实际业务需求选择最合适的方式来表达流程。 3. 工作流活动:活动是Workflow 4.0的基本构建块,每...

    asp workflow

    4. 工作流服务(Workflow Service):执行工作流实例,管理其生命周期。 5. 用户界面(UI):允许用户查看、签收和处理任务。 通过这个demo,开发者可以学习到如何在ASP.NET环境中集成工作流服务,如何设计和实现...

    workflow,微软工作流Demo

    6. **工作流服务(WCF Workflow Services)**:结合Windows Communication Foundation(WCF),WF可以创建工作流服务,使得工作流可以通过Web服务接口与其他系统交互。 7. **宿主环境**:工作流需要在某个环境中...

    关工作流(Workflow)的基本概念、原理与方

    工作流(Workflow)是信息化系统中的一个重要组成部分,它涉及到企业或组织内部的业务流程自动化管理。这个概念源自20世纪80年代,随着信息技术的发展,工作流管理系统(Workflow Management System, WfMS)逐渐成为...

    workflow 工作流引擎c#版本 源码

    工作流(Workflow)是一种自动化业务过程的技术,它允许在组织内部或跨组织执行一系列任务,按照预定义的规则和步骤进行。在IT领域,工作流引擎是实现工作流的核心组件,它负责管理和执行这些工作流程。C#是...

    vue-workflow-chart:使用Vue.js创建工作流图

    Vue-Workflow-Chart开发用于可视化流程或工作流。 例如,在一家公司中,工作流程会变得非常复杂和混乱,因此插图可以帮助您理解流程。 由于工作流由状态和过渡组成,因此必须将这些元素传递到vue-workflow-chart。...

    workflow student guide-工作流手册

    - **Workflow引擎**:执行工作流定义的后端服务。 - **工作流过程定义**:定义工作流逻辑的文件或数据库表。 - **支持的过程构造**:可使用的逻辑元素列表,如分支(Branch)、循环(Loop)等。 - **工作流定义加载...

    VS2010工作流示例及源码

    5. **持久化与工作流服务**:掌握工作流的持久化机制,以及如何利用工作流服务(WCF Workflow Service)将工作流集成到服务导向架构中。 6. **工作流生命周期管理**:了解如何启动、暂停、恢复和终止工作流实例,...

    工作流代码 Workflow.rar

    在本项目"工作流代码 Workflow.rar"中,我们看到的是一个基于C#语言开发的工作流平台,与MS_SQL数据库紧密集成,提供了丰富的功能来支持企业级的工作流需求。 1. 部门管理:这部分代码可能包含对组织结构的建模,...

Global site tag (gtag.js) - Google Analytics