如何在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应用程序?
我不太确定你是否还需要这个(我怀疑),但我只是回答这个问题,因为它在谷歌搜索排名很高。嗯,使用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。