簡體   English   中英

如何在ASP.NET Web.Api中運行后台任務?

[英]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();
    }

SQL Server存儲

要注冊不需要OWIN的SQL Server存儲,這就是您需要做的...

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

同樣,通過查看此處的源代碼,我得出了這個結論。

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

結論

Hangfire不依賴OWIN,他們已經承認

您可以使用ThreadPool.QueueUserWorkItem來委派您的進程,它將由CLR使用線程進行管理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM