Elsa Web 工作流

安装指南:在 ASP.NET 应用中集成 Elsa 工作流

本指南将展示如何将 Elsa 工作流集成到 ASP.NET Core 应用程序中。这种设置非常适合于在后台执行长时间运行的工作流,支持诸如计时器(Timer)、Cron 表达式、事件(Event)等需要后台服务的各种活动。

初始设置

使用以下命令创建一个新的空 ASP.NET 应用:

dotnet new web -n "ElsaWeb" -f net8.0

导航至项目根目录并安装 Elsa 包:

cd ElsaWeb
dotnet add package Elsa

打开 Program.cs 文件,并替换其内容为:

Program.cs:

using Elsa.Extensions;

var builder = WebApplication.CreateBuilder(args);

// 将服务添加到容器中。
builder.Services.AddControllers();
builder.Services.AddElsa();

var app = builder.Build();

// 配置HTTP请求管道。
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

此配置允许您的应用程序使用 Elsa 服务来运行工作流。

尝试实践

示例 1:控制台输出

添加一个名为 RunWorkflowController 的新控制器:

Controllers/RunWorkflowController.cs:

using Elsa.Workflows.Activities;
using Elsa.Workflows.Contracts;
using Microsoft.AspNetCore.Mvc;

namespace ElsaWeb.Controllers;

[ApiController]
[Route("run-workflow")]
public class RunWorkflowController(IWorkflowRunner workflowRunner) : ControllerBase
{
    [HttpGet]
    public async Task<IActionResult> Get()
    {
        await workflowRunner.RunAsync(new WriteLine("你好,ASP.NET 世界!"));
        return Ok();
    }
}

使用以下命令启动应用:

dotnet run --urls=https://localhost:5001

然后访问 https://localhost:5001/run-workflow。控制台应显示 "你好,ASP.NET 世界!"

示例 2:HTTP 响应

安装 Elsa.Http 包:

dotnet add package Elsa.Http

Program.cs 中修改 Elsa 的设置:

builder.Services.AddElsa(elsa => elsa.UseHttp());

调整控制器以使用 WriteHttpResponse 活动:

Controllers/RunWorkflowController.cs:

using Elsa.Http;
using Elsa.Workflows.Contracts;
using Microsoft.AspNetCore.Mvc;

namespace ElsaWeb.Controllers;

[ApiController]
[Route("run-workflow")]
public class RunWorkflowController(IWorkflowRunner workflowRunner) : ControllerBase
{
    [HttpGet]
    public async Task Get()
    {
        await workflowRunner.RunAsync(new WriteHttpResponse
        {
            Content = new("你好,ASP.NET 世界的 HTTP!")
        });
    }
}

重启应用并导航至 https://localhost:5001/run-workflow。浏览器现在应该显示消息。

显示消息

示例 3:工作流作为 HTTP 端点

除了编程式调用工作流之外,您还可以创建本身可通过 HTTP 路由的工作流。为此,我们需要向请求管道中添加 WorkflowsMiddleware ASP.NET 中间件组件。

Program.cs 中,在 app.Run(); 前添加以下行:

app.UseWorkflows();

创建一个具有 HTTP 功能的新工作流类:

Workflows/HttpHelloWorld.cs:

using Elsa.Http;
using Elsa.Workflows;
using Elsa.Workflows.Activities;
using Elsa.Workflows.Contracts;

namespace ElsaWeb.Workflows;

public class HttpHelloWorld : WorkflowBase
{
    protected override void Build(IWorkflowBuilder builder)
    {
        builder.Root = new Sequence
        {
            Activities =
            {
                new HttpEndpoint
                {
                    Path = new("/hello-world"),
                    CanStartWorkflow = true
                },
                new WriteHttpResponse
                {
                    Content = new("HTTP工作流的世界,你好!")
                }
            }
        };
    }
}

更新 Program.cs 以注册此工作流:

using ElsaWeb.Workflows; // 添加这一行

builder.Services.AddElsa(elsa =>
{
    elsa.AddWorkflow<HttpHelloWorld>();
    elsa.UseHttp();
});

重启应用并访问 https://localhost:5001/workflows/hello-world。你应该能看到相应的消息。

响应

HTTP 端点前缀路径
注意 URL 路径是 /workflows/hello-world 而不是我们在工作流定义中定义的 /hello-world。这是因为 WorkflowsMiddleware 组件默认配置使用 /workflows 作为前缀路径。你可以通过向 UseHttp 方法传递不同的前缀路径来更改这一点。例如,如果你想使用 /api,可以通过调用 elsa.UseHttp(http => http.ConfigureHttpOptions = options => options.BasePath = "/api"); 来实现。

总结

我们已经介绍了如何在 ASP.NET Core 应用程序中设置 Elsa Workflows,展示了各种工作流执行和集成的方法。这种方法允许在你的 ASP.NET 应用中灵活高效地处理后台进程和活动。

完整的代码和额外资源可在此获取:这里

在本文档中