簡體   English   中英

調度Web Api方法以設置的間隔運行

[英]Scheduling Web Api method to run on set intervals

在我目前的項目中,需要安排一個方法以設定的間隔運行,例如每周一次,目前這是通過Windows服務創建HttpClient並點擊所需的控制器方法完成的。

我想知道這是否可以在Web Api項目本身自動化,而不是使用外部服務。 到目前為止,我還沒有找到任何關於這樣做的文檔。

抱歉沒有代碼樣本可以使用,因為我還沒有找到一個基礎。

如果您需要安排后台任務每周運行,您可以使用FluentSchedulerNuGet鏈接 )為您運行它。 你可以這樣做:

public class WeeklyRegistry : Registry
{
    public WeeklyRegistry()
    {            
        Schedule<WeeklyTask>().ToRunEvery(1).Weeks(); // run WeeklyTask on a weekly basis           
    }
}

public class WeeklyTask : IJob
{
    public void Execute()
    {            
        // call the method to run weekly here
    }
}

更新 FluentScheduler的新版本略微更改了API。 該任務現在應該來自IJob,而不是ITask。 更新了我的示例以反映這一點。

Web Api中沒有一種方法可以實現您的需求。 無論如何,Web Apis應該是無國籍的。

理論上,您可以在Web服務器上創建一個長時間運行的任務,以定期調用您的Api(或直接調用方法),放置此類方法的最佳位置是全局asax文件中的OnStart方法。 但是,當Web服務器加載到app-domain時,將運行此方法,並且當Web服務器決定卸載您的應用程序時,該任務將被終止。 因此,如果您未至少調用一次Web服務器,則不會啟動任務。 如果您的Web服務器不能定期訪問,您的任務將被終止。

擁有外部可靠資源(例如您的服務)仍然是最好和最安全的方法。

這不是您希望Web API執行的操作,我不認為這樣做。 關於單一責任的事情。

服務方法有什么問題? 您可能還想查看Windows任務計划程序。

我不是說這是最好的方法,但它對我有用,而且非常簡單。

我們的WebApi已經到位,我需要一個快速的解決方案來每小時調用一次API。 我使用了node.js並編寫了幾行使用moment.js庫的代碼。 有計時器/倒計時功能可用。 我將它設置為每小時觸發一次並調用我們的API。 它有沒有在IIS上工作。 這是我以前的雇主,否則我會發布實際的代碼。

這很簡單,也很有效。 希望它可以幫助某人。 node.js + moment.js庫。

暫無
暫無

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

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