我正在使用C#和.NET Framework 4.5.1开发ASP.NET MVC Web Api 2应用程序。
有时,当用户在ApiController
上调用get时,我必须在后台运行任务。该任务将填充包含更多数据的数据库表。
在互联网上搜索我发现了这篇文章How to run Background Tasks in ASP.NET。我想使用HangFire。但是阅读它的文档我没有找到一种方法来使用它而不在我的ASP.NET Web Api应用程序上使用OWIN(我现在没有使用它)。
有没有办法在没有OWIN的情况下使用Hangfire?或者,是否有另一种选择在ASP.NET Web Api 2应用程序上运行后台任务?
答案 0 :(得分:5)
我不太确定你是否仍然需要这个(我对此表示怀疑)但我只是回答这个问题,因为它在谷歌搜索上排名很高。那么,使用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.NET,可以从控制台应用程序到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();
}
要注册您不需要OWIN的SQL Server存储,这就是您需要做的所有事情......
Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage("YOUR_CONNECTION_STRING");
再一次,我通过查看源代码来得出这个结论......
Hangfire并不依赖于OWIN而且他们已经承认
答案 1 :(得分:0)
您可以使用ThreadPool.QueueUserWorkItem委派您的流程,它将由CLR使用线程进行管理。