前言

微软的Workflow Foundation基于.NET Framework,并且没有向.NET Core迁移的计划。

我们的很多项目使用了工作流引擎,这些项目向.NET Core以及更高版本迁移时遇到了不少问题,一直在寻找/开发适合的工作流引擎。

找到一些开源的项目,可以解决一些问题,还有些项目不是基于.NET生态的,但我希望能有一个长期稳定的基于.NET生态的项目,能够满足多种场景,可以替换原来的Workflow Foundation。

特性

1、同时支持编程工作流定义和配置工作流定义,最好有图形化的管理工具。

2、支持长期工作流。

3、支持有限状态机类型的工作流定义。

4、工作流引擎可以集成在应用中,也可以独立部署为工作流服务器,采用Web API的方式调用。

在我们跟踪的工作流相关项目中,Elsa一直在稳步发展,最新的版本(2.9)已经基本可以满足我们的上述要求了,在以后的版本也会增加对有限状态机的支持。

这里简单介绍一下如何创建工作流服务器和图形化的工作流配置管理应用。

正文

首先,使用Visual Studio 2022创建一个空的ASP.NET Core Web应用,名称为MyElsaServer。

项目创建完成后,使用NuGet包管理器,安装如下程序包:

Install-Package Elsa
Install-Package Elsa.Activities.Http
Install-Package Elsa.Persistence.EntityFramework.Sqlite
Install-Package Elsa.Server.Api

然后,修改项目的Properties/launchSettings.json,去掉通过IIS Express启动的选项:

{"profiles": {"MyElsaServer": {"commandName": "Project","dotnetRunMessages": true,"launchBrowser": true,"applicationUrl": "http://localhost:5298","environmentVariables": {"ASPNETCORE_ENVIRONMENT": "Development"}}}
}

最后,修改Program.cs:

using Elsa.Persistence.EntityFramework.Core.Extensions;
using Elsa.Persistence.EntityFramework.Sqlite;var builder = WebApplication.CreateBuilder(args);var elsaSection = builder.Configuration.GetSection("Elsa");// Elsa services.
builder.Services.AddElsa(elsa => elsa.UseEntityFrameworkPersistence(ef => ef.UseSqlite()).AddConsoleActivities().AddHttpActivities(elsaSection.GetSection("Server").Bind).AddJavaScriptActivities());// Elsa API endpoints.
builder.Services.AddElsaApiEndpoints();// Allow arbitrary client browser apps to access the API.
// In a production environment, make sure to allow only origins you trust.
builder.Services.AddCors(cors => cors.AddDefaultPolicy(policy => policy.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().WithExposedHeaders("Content-Disposition"))
);var app = builder.Build();app.UseCors().UseHttpActivities().UseRouting().UseEndpoints(endpoints =>{// Elsa API Endpoints are implemented as regular ASP.NET Core API controllers.endpoints.MapControllers();}).UseWelcomePage();
app.Run();

最后,在appSettings.json中增加服务器地址的定义:

"Elsa": {"Http": {"BaseUrl": "http://localhost:5298"}}

启动项目,会出现欢迎界面:

服务器可以运行了,但还没有定义工作流,现在我们创建图形化的工作流定义和管理应用,向工作流服务器发布工作流,并查看工作流的执行情况。

在解决方案中增加一个新的ASP.NET Core Web空项目,命名为MyElsaDashboard,修改Properties/launchSettings.json,将项目改为自启动:

{"profiles": {"MyElsaDashboard": {"commandName": "Project","dotnetRunMessages": true,"launchBrowser": true,"applicationUrl": "http://localhost:5060","environmentVariables": {"ASPNETCORE_ENVIRONMENT": "Development"}}}
}

在项目中添加如下程序包:

Install-Package Elsa.Designer.Components.Web

修改Program.cs:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
var app = builder.Build();app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints => { endpoints.MapFallbackToPage("/_Host"); });app.Run();

然后在项目中创建Pages文件夹,在文件夹中添加两个Razepage页面,名称为_ViewImports.cshtml和_Host.cshtml,_ViewImports的内容如下:

@ addTagHelper *, Microsoft .AspNetCore.Mvc.TagHelpers

_Host.cshtml的内容如下:

@page "/"
<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Elsa Workflows</title><link rel="icon" type="image/png" sizes="32x32" href="/_content/Elsa.Designer.Components.Web/elsa-workflows-studio/assets/images/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/_content/Elsa.Designer.Components.Web/elsa-workflows-studio/assets/images/favicon-16x16.png"><link rel="stylesheet" href="/_content/Elsa.Designer.Components.Web/elsa-workflows-studio/assets/fonts/inter/inter.css"><link rel="stylesheet" href="/_content/Elsa.Designer.Components.Web/elsa-workflows-studio/elsa-workflows-studio.css"><script src="/_content/Elsa.Designer.Components.Web/monaco-editor/min/vs/loader.js"></script><script type="module" src="/_content/Elsa.Designer.Components.Web/elsa-workflows-studio/elsa-workflows-studio.esm.js"></script>
</head>
<body>
<elsa-studio-root server-url="http://localhost:5298" monaco-lib-path="_content/Elsa.Designer.Components.Web/monaco-editor/min"><elsa-studio-dashboard></elsa-studio-dashboard>
</elsa-studio-root>
</body>
</html>

请注意上面的server-url属性,这里指向我们前面创建的Elsa服务器地址。

现在我们修改解决方案的启动项目,设置为两个项目同时启动:

在Visual Studio中执行启动,管理界面如下:

选择Workflow Definitions进入流程定义管理界面,点击“Create Workflow”创建新的流程:

点击Start,然后选择Http->Http EndPoint,定义流程的入口url:

设置完成后按Save保存,可以看到多个一个环节,在这个环节下点击“+”图标可以继续添加环节,这里选择HttpResponse:

在Advanced选择卡中,选择Status Code为Ok,添加完成后,流程如下:

流程定义完成了,点击Publish发布流程到流程服务器。

流程发布后,可以在流程服务器执行流程。

我们在浏览器访问http://localhost:5298/hello-world,可以看到流程执行的结果:

回到流程管理应用,选择Workflow Instances,可以看到刚刚执行完成的流程实例:

点击流程Id,可以查看流程执行的详细过程:

到此,我们完成了工作流服务和管理应用的创建。

示例代码

Githubd地址:https://github.com/zhenl/MyElsa

转自:寻找无名的特质

链接:cnblogs.com/zhenl/p/16341366.html

-

技术群:添加小编微信并备注进群

小编微信:mm1552923

公众号:dotNet编程大全

开源的 .NET 工作流引擎 Elsa 开源相关推荐

  1. 工作流引擎WorkFlow开源项目

    1.WorkFlowEngine https://workflowengine.io/downloads/

  2. 共有90款 工作流引擎开源软件

    共有90款 工作流引擎开源软件,第1页 java工作流引擎,开源工作流引擎,工作流引擎是什么,工作流引擎设计,工作流引擎介绍,.net工作流引擎,工作流引擎比较,工作流引擎内核揭秘,.net开源工作流 ...

  3. 驰骋工作流引擎-总体介绍

    关键字:驰骋工作流引擎,开源工作流,CCFLOW,CCBPM,流程引擎,流程解析服务器,表单引擎,表单解析服务器,.NET工作流,源代码 产品名称: 驰骋.net工作流程引擎. 英文名称: chich ...

  4. 驰骋工作流引擎-自由表单

    Technorati Tags: 驰骋工作流引擎,开源工作流,CCFLOW,CCBPM,流程引擎,流程解析服务器,表单引擎,表单解析服务器,.NET工作流,源代码 目前流行的表单设计器有两种思路,第一 ...

  5. 常见的工作流引擎(osworkflow、jbpm、activiti、flowable、camunda)比较

    参考文章:osworkflow.jbpm.activiti.flowable.camunda开源流程引擎哪个好?_大龄码农有梦想的博客-CSDN博客_流程引擎有哪些 工作流引擎选择(为何使用activ ...

  6. 若依低代码平台(带工作流引擎版本)使用记录

    目录 0 平台介绍 1 创建数据库 2 Redis缓存数据库 3 修改配置文件 4 修改maven依赖 5 运行后台 6 运行前端 7 运行效果 0 平台介绍 带工作流引擎的开源低代码平台并不常有,这 ...

  7. Java 3个常用工作流引擎

    一:Java工作流框架是一种用于设计.执行和管理工作流程的技术.以下是几个常见的Java工作流框架: Activiti:Activiti是一款流行的开源Java工作流引擎,它基于BPMN 2.0标准, ...

  8. .NET 5 开源工作流框架elsa技术研究

    编者注: 工作流框架 elsa 是.NET基金会下面的开源项目,2.0版本即将在3月份发布,目前正在紧锣密鼓的开发之中,2020年2月份我也介绍过推荐一个很棒的开源工作流elsa-core ,今天给大 ...

  9. 几种开源工作流引擎的简单比较(转)

    摘要:目前开源工作流引擎用的最多的是jbpm , 各种特性都不错, 文档也比较多, 下面只简单列举一下 目前开源工作流引擎用的最多的是jbpm , 各种特性都不错, 文档也比较多, 下面只简单列举一下 ...

最新文章

  1. 丢弃Transformer!旷视和西安交大提出基于FCN的端到端目标检测网络
  2. 【全文】Libra回应质疑:Facebook将放弃控制权,不与主权货币竞争
  3. 深入浅出 JQuery (一) 浅析JQuery
  4. 微软亚洲研究院刘铁岩博士:迎接深度学习的“大”挑战(一)
  5. wxWidgets利用透明图片自定义工具条
  6. 会计的思考(3):通过公司例会制度加强财务管理职能
  7. mongDB批量插值
  8. iView Input 输入框表单非空校验,默认值是 Number 类型校验失败
  9. Dotnet core使用JWT认证授权最佳实践(二)
  10. ue4集合类型_UE4粒子系统渲染管线概述
  11. 时间选择插件Foundation datepicker
  12. ubuntu解决tensorflow提示未编译使用SSE3、SSE4.1、SSE4.2、AVX、AVX2、FMA的问题
  13. Install Anjuta
  14. 机器学习中的主动学习实现_我如何使用机器学习来帮助实现正念
  15. 《摩根写给儿子的32封信》 03 企业家的资质
  16. 推荐:21个演示展示强大的jQuery特效
  17. Python判断节假日 chinese_calendar
  18. Python:实现gauss easte高斯复活节日期算法(附完整源码)
  19. 51单片机+L298N控制步进电机【T型】加减速
  20. 为什要使用BindService?为了调用服务中的方法

热门文章

  1. 【GNN报告】香港科技大学李佳:图异常检测再思考—我们究竟需要怎样的图神经网络?
  2. 《销售管理必读12篇》购买方法
  3. 百度MIP技术 - MIP移动网页加速器
  4. 这就是巨人的肩膀!2018年阿里巴巴开源的那些牛逼项目汇总
  5. c++Primer5,类设计者的工具
  6. 日语学习日记之先导篇 20211130
  7. STM32F103PWM+重映射 小程序
  8. 9.29 a.m.小结
  9. bilibili 学习
  10. ISE联合Modelsim仿真失败的解决办法