[英]How do I run Background Tasks in ASP.NET Web.Api?
我正在使用C#和.NET Framework 4.5.1開發ASP.NET MVC Web Api 2應用程序。
有時,當用戶在ApiController
上調用get時,我必須在后台運行任務。 該任務將用更多數據填充數據庫表。
在Internet上搜索,我發現了這篇文章, 如何在ASP.NET中運行后台任務 。 我想使用HangFire 。 但是閱讀它的文檔后,我沒有找到一種方法來在不使用我的ASP.NET Web Api應用程序上的OWIN的情況下使用它(我現在不使用它)。
沒有OWIN,有沒有辦法使用Hangfire? 也許還有其他選擇可以在ASP.NET Web Api 2應用程序上運行后台任務?
我不太確定您是否仍然需要這個(我對此表示懷疑),但是我將回答這個問題,因為它在Google搜索中排名很高。 好了,使用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服務器部分負責后台作業處理。 該服務器不依賴ASP.NET,可以在任何地方啟動,從控制台應用程序到Microsoft Azure Worker Role。 通過BackgroundJobServer類公開所有應用程序的單個API
這意味着您將在應用程序啟動時啟動服務器...
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,他們已經承認
您可以使用ThreadPool.QueueUserWorkItem來委派您的進程,它將由CLR使用線程進行管理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.