# Workflow_Init **Repository Path**: tangss_695/workflow_init ## Basic Information - **Project Name**: Workflow_Init - **Description**: 根据网上的教程学习Windows Workflow Foundation和Elsa - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2024-09-21 - **Last Updated**: 2025-08-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一、前言 本篇文章帮助读者快速了解Windows Workflow Foundation和Elsa,及实操。 | 类型 | 地址 | |----|----| | WorkFlow视频教程 | https://www.bilibili.com/video/BV1sz421U7yN/?p=1 | | Elsa视频教程 | https://www.bilibili.com/video/BV1jC411G77y/?spm_id_from=333.337.search-card.all.click&vd_source=bad95ca6359389d05c64799ee99a25be | | Elsa开源项目 | https://github.com/elsa-workflows | # 二、背景 ## 1.关于应用开发中的工作流 工作流,是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则,在计算机中以恰当的模型表达并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。 ## 2.常见处理方案 Windows Workflow Foundation、第三方开源框贺(Elsa)、自定义 ## 3.Workflow 微软官方推出的工作流开发框架,用于描述业务逻辑或应用程序流程。 核心概念包括工作流程(Workflows)、活动(Activities)、主机环境(Host Environment)和持久化与恢复(Persistence and Recovery)。工作流程是由一系列有序的活动组成的,每个活动代表一个单元操作或任务。WF可以在各种不同的主机环境中运行,并与其他.NET技术和框架集成良好,如WCF、WPF、Winforms等。 是一个强大的工作流程框架,提供了丰富的功能和灵活的编程模型,用于简化和管理复杂的业务逻辑和应用程序流程。 ## 4.相关概念 - 节点封闭:业务逻辑对象(Activity); - 流程拼装:前后关系; - 流向关系整理; - 变量参数; - 交互与Workflow流程执行; # 三、安装 点击菜单栏的【工具】-\>【获取工具和功能】: ![](images/1.png) 然后: ![](images/2.png) 重新启动VS再打开的时候就有啦! # 四、Workflow工作流实操 ## 1.项目需求 猜数游戏,随机一个范围内的目标值,用户通过输入猜测的数字进行尝试,猜错重猜,可猜多次,直到猜对为止。 ## 2.工作流实现 序列工作流、流程图工作流、状态机工作流 # 五、创建WF工作流 ## 1.工作流活动库【ActivityLib】   ### 1.1.创建工作流活动库【ActivityLib】 ![](images/3.png) ### 1.2.引用程序集【System.Activities】 ![](images/4.png) ### 1.3.增加代码活动【GuessInput】 ![](images/5.png) ### 1.4.修改【GuessInput.cs】文件 ![](images/6.png) ## 2.创建序列工作流 ### 2.1.创建工作流控制台应用程序【WorkflowApp】 ![](images/7.png) ### 2.2.引用项目【ActivityLib】 ![](images/8.png) ### 2.3.增加序列【Sequence】 ![](images/9.png) ### 2.4.增加变量【Target】 ![](images/10.png) ### 2.5.增加参数【Guess】 ![](images/11.png) ### 2.6.增加【Assign】 ![](images/12.png) ### 2.7.增加输出【WriteLine】(非必选) ![](images/13.png) ### 2.8.增加【DoWhile】 ![](images/14.png) | 类型 | 说明 | | --------- | -------------------------------------------------------- | | Body | 提示请输入;接收一个输入数字;进行判断;判断结果的输出; | | Condition | 猜测的数字跟Target不一致的情况下 | ### 2.9. 【DoWhile】-\>【Body】增加序列【Sequence】 ![](images/15.png) ### 2.10. 【DoWhile】-\>【Body】-\>【Sequence】增加输出【WriteLine】 ![](images/16.png) ### 2.11. 【DoWhile】-\>【Body】-\>【Sequence】增加【GuessInput】 ![](images/17.png) ### 2.12. 【DoWhile】-\>【Body】-\>【Sequence】增加【If】 ![](images/18.png) ### 2.13. 运行【WorkflowApp】 ![](images/19.png) ## 3.创建流程图工作流 ### 3.1.增加Workflow活动页【Flowchart.xaml】 ![](images/20.png) ### 3.2.增加流程图【Flowchart】 ![](images/21.png) ### 3.3.增加变量【Target】 ![](images/22.png) ### 3.4.增加参数【Guess】 ![](images/23.png) ### 3.5.增加【Assign】 ![](images/24.png) ### 3.6.增加输出【WriteLine】 ![](images/25.png) ### 3.7.增加【GuessInput】 ![](images/26.png) ### 3.8.增加【FlowDecision】 ![](images/27.png) ### 3.9.增加【WriteLine】 ![](images/28.png) ### 3.10.修改【Program.cs】 ![](images/29.png) ### 3.11.运行【WorkflowApp】 ![](images/30.png) ## 4.创建状态机工作流 ### 4.1.增加Workflow活动页【StateMachine.xaml】 ![](images/31.png) ### 4.2.增加状态机【StateMachine】 ![](images/32.png) ### 4.3.增加变量【Target】 ![](images/33.png) ### 4.4.增加参数【Guess】 ![](images/34.png) ### 4.5.双击【State1】-\>【Entry】增加【Assgin】 ![](images/35.png) ### 4.6.增加【State】 ![](images/36.png) ### 4.7.双击【State2】-\>【Entry】增加【WriteLine】 ![](images/37.png) ### 4.8.双击【State2】-\>【Exit】增加【GuessInput】 ![](images/38.png) ### 4.9.增加【FinalState】 ![](images/39.png) ### 4.10.双击【FinalState】-\>【Entry】增加【WriteLine】 ![](images/40.png) ### 4.11.修改【T2】为【True】Condition ![](images/41.png) ### 4.12.增加【False】Condition ![](images/42.png) ### 4.13.双击【False】Condition-\>增加【If】和【WriteLine】 ![](images/43.png) ### 4.14.修改【Program.cs】 ![](images/44.png) ### 4.15.运行【WorkflowApp】 ![](images/45.png) ## 5.使用代码创建序列工作流 ### 5.1.增加控制台应用程序【DynamicWorkflow】 ![](images/46.png) ### 5.2.引用项目【ActivityLib】 ![](images/47.png) ### 5.3.引用程序集【System.Activities】 ![](images/48.png) ### 5.4.修改【Program.cs】 | ![](images/49.png) | | | ---------------------- | ---------------------- | ### 5.5.运行【DynamicWorkflow】 ![](images/51.png) ## 6.使用代码创建流程图工作流 ### 6.1.修改【Program.cs】-\>【Main】函数 ![](images/52.png) ### 6.2.修改【Program.cs】-\>增加【FlowchartDynamic】函数 | ![](images/53.png) | ![](images/54.png) | | ---------------------- | ---------------------- | ### 6.3.运行【DynamicWorkflow】 ![](images/55.png) ## 7.使用代码创建流程图工作流 ### 7.1.修改【Program.cs】-\>【Main】函数 ![](images/56.png) ### 7.2.修改【Program.cs】-\>增加【StateMachineDynamic】函数 | ![](images/57.png) | ![](images/58.png) | | ---------------------- | ---------------------- | ### 7.3.运行【DynamicWorkflow】 ![](images/59.png) # 六、Elsa ## 1.Elsa优势 小巧 简单 快速 易用 扩展性 持久化存储 ![](images/60.png) | 项目 | 说明 | | ------------------ | ----------------- | | elsa-core | 核心应用程序 | | elsa-studio | 基于vue的应用程序 | | elsa-documentation | 使用说明文档 | ## 2.搭建Elas工作流项目 ### 2.1.创建Web API项目【ElsaApp】 ![](images/61.png) ### 2.2.NuGet引入【Elsa】 ![](images/62.png) ### 2.3.NuGet引入【Elsa.Activities.Http】 ![](images/63.png) ### 2.4.添加【CustomerWorkFlow】文件夹 ![](images/64.png) ### 2.5.添加【HelloWorldWF.cs】 ![](images/65.png) ### 2.6.修改【Program.cs】配置Elsa | | | |------------------------|------------------------| | ![](images/66.png) | ![](images/67.png) | ### 2.7.运行Web AP项目【ElsaApp】 ![](images/68.png) ## 3.搭建Elsa可视化工作流设计器项目 ### 3.1.创建Web API项目【ElsaAdmin】 ![](images/69.png) ### 3.2.NuGet引入【Elsa】相关包 ![](images/70.png) | 包 | 说明 | | ------------------------------------------ | --------------------- | | Elsa | | | Elsa.Activities.Http | 支持HTTP请求 | | ~~Elsa.Activities.Temporal.Quartz~~ | ~~定时调度任务~~ | | Elsa.Designer.Components.Web | 配置WEB页面 | | Elsa.Persistence.EntityFramework.SqlServer | 用于Elsa连接数据 | | ~~Elsa.Providers.Redis~~ | ~~用于Elsa连接Redis~~ | | Elsa.Server.Api | 用于API | | Microsoft.EntityFrameworkCore.Design | 对应数据库SqlServer | | Microsoft.EntityFrameworkCore.SqlServer | 对应数据库SqlServer | ### 3.3.创建【MyElsa】数据库 ![](images/71.png) ### 3.4.修改【Program.cs】配置 ![](images/72.png) ### 3.5.添加【_Host.cshtml】 ![](images/host.png) ### 3.6.运行【ElsaAdmin】 ![](images/73.png) | 类型 | 说明 | | -------------------- | -------------- | | Workflow Definitions | 工作流程定义 | | Workflow Instances | 工作流程实例 | | Workflow Registry | 工作流程注册表 | ### 3.7.创建工作流 进入【Workflow Definitions】-\>点击【Create Workflow】 ![](images/74.png) 点击【设置】: ![](images/75.png) 设置工作流名称、显示名称、描述,点击【Save】: ![](images/76.png) 点击【Start】: ![](images/77.png) 点击【HTTP】-\>【HTTP Endpoint】: ![](images/78.png) 设置Path、请求方式、输出结果,点击【Save】: ![](images/79.png) 点击【+】号: ![](images/80.png) 点击【HTTP】-\>【HTTP Response】: ![](images/81.png) 设置Content,点击【Save】: ![](images/82.png) 点击【Publish】发布流程: ![](images/83.png) ### 3.7.【工作流程定义】列表 ![](images/84.png) ### 3.8.测试工作流 ![](images/85.png) ### 3.9.【工作流实例】列表 ![](images/86.png) ### 3.10.数据库结构说明 | 表名 | 说明 | | ---------------------------------------- | -------------------- | | \[Elsa\].\[WorkflowDefinitions\] | 工作流程定义 | | \[Elsa\].\[WorkflowExecutionLogRecords\] | 工作流执行的详细记录 | | \[Elsa\].\[WorkflowInstances\] | 工作流程实例 | | \[Elsa\].\[Triggers\] | 触发条件 | | \[Elsa\].\[Bookmarks\] | | # 七、尾声 本人邮箱(732320850@qq.com),有需要可以@我互相交流一下技术和经验。