如何在ASP中运行后台任务?净Web.Api

本文关键字:Web Api 后台任务 运行 ASP | 更新日期: 2023-09-27 17:49:15

我正在开发一个ASP。.NET MVC Web Api 2应用程序,使用c#和。NET Framework 4.5.1.

有时候,当用户在ApiController上调用get时,我必须在后台运行一个任务。该任务将用更多的数据填充数据库表。

在网上搜索我找到了这篇文章,如何在ASP.NET中运行后台任务。我想用HangFire。但是阅读它的文档,我没有找到一种方法来使用它,而不使用我的ASP上的OWIN。. NET Web Api应用程序(我现在没有使用它)。

有没有办法使用Hangfire没有OWIN?或者,是否有另一种选择在ASP上运行后台任务?. NET Web Api 2应用程序?

如何在ASP中运行后台任务?净Web.Api

我不太确定你是否还需要这个(我怀疑),但我只是回答这个问题,因为它在谷歌搜索排名很高。嗯,使用OWIN启动Hangfire服务器的常规方法如下:

public void Configuration(IAppBuilder app){
    app.UseHangfireServer();
}

服务器生命周期

然而,根据文档…Hangfire完全不依赖于OWIN,你所需要做的就是启动和停止BackgroundJobServer

(源)http://docs.hangfire.io/en/latest/background-processing/processing-background-jobs.html

Hangfire Server部分负责后台作业处理。服务器不依赖于ASP。它可以在任何地方启动,从控制台应用程序到Microsoft Azure Worker Role。所有应用程序的单一API都通过BackgroundJobServer类

公开

这意味着您将在应用程序启动时启动服务器…

var server = new BackgroundJobServer();

,你会在应用程序结束时处理它…

server.Dispose();

这正是app.UseHangfireServer();所做的。查看源代码…

https://github.com/HangfireIO/Hangfire/blob/master/src/Hangfire.Core/AppBuilderExtensions.cs L293

https://github.com/HangfireIO/Hangfire/blob/master/src/Hangfire.Core/AppBuilderExtensions.cs L311

参见下面使用global.asax..

的示例
    BackgroundJobServer _server;
    protected void Application_Start(object sender, EventArgs e)
    {
        GlobalConfiguration.Configuration
            .UseSqlServerStorage("YOUR_CONNECTION_STRING");
        _server = new BackgroundJobServer();
    }
    protected void Application_End(object sender, EventArgs e)
    {
        _server.Dispose();
    }

SQL Server Storage

注册SQL Server存储你不需要OWIN,这是所有你需要做的…

Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage("YOUR_CONNECTION_STRING");

再一次,我通过查看源代码得出了这个结论…

https://github.com/HangfireIO/Hangfire/blob/master/src/Hangfire.SqlServer/SqlServerStorageExtensions.cs

结论

Hangfire不依赖于OWIN,他们已经承认了这一点

可以使用ThreadPool。