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

Van*_*nel 2 c# asp.net background asp.net-web-api hangfire

我正在使用C#和.NET Framework 4.5.1开发ASP.NET MVC Web Api 2应用程序.

有时,当用户调用get on时,ApiController我必须在后台运行任务.该任务将填充包含更多数据的数据库表.

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

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

Leo*_*Leo 5

我不太确定你是否仍然需要这个(我对此表示怀疑)但我会回答这个问题,因为它在谷歌搜索上排名很高.那么,使用OWIN启动Hangfire服务器的传统方法如下......

public void Configuration(IAppBuilder app){
    app.UseHangfireServer();
}
Run Code Online (Sandbox Code Playgroud)

服务器生命周期

但是,基于文档... Hangfire根本不依赖于OWIN,您需要做的就是启动和停止 BackgroundJobServer

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

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

这意味着你应该在应用程序启动时启动服务器...

var server = new BackgroundJobServer();
Run Code Online (Sandbox Code Playgroud)

当申请结束时你会处理它...

server.Dispose();
Run Code Online (Sandbox Code Playgroud)

而这正是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();
    }
Run Code Online (Sandbox Code Playgroud)

SQL Server存储

要注册SQL Server存储,您不需要OWIN,这就是您需要做的所有事情......

Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage("YOUR_CONNECTION_STRING");
Run Code Online (Sandbox Code Playgroud)

再次,我通过查看源代码来得出这个结论......

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

结论

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