2016-05-31 49 views
6

我正在開發ASP.NET Core RC2應用程序。此應用程序需要定期調用某些任務,例如發送電子郵件或調用特定的業務邏輯。在ASP.NET Core RC2應用程序中定期運行後臺任務

我知道有第三方庫,如Hangfire或Quartz.NET,可以提供這種即時可用的調度功能。不過,我認爲這些目前都不支持ASP.NET Core RC2。是否還有其他可供選擇的與ASP.NET Core RC2兼容的選項?

如果沒有,我想可能的選擇是從單獨的Windows服務中使用這些第三方庫中的一個,然後它可以針對支持的.NET版本。然後,該服務可以通過其Web API定期向ASP.NET應用程序發出請求,以調用這些任務。

但是我不希望有一個單獨的服務,因爲它增加了移動部件的數量,並使應用程序的部署變得複雜。

+1

你在哪裏運行應用程序? Azure的?如果您使用Azure應用服務,則可以使用工作人員角色將後臺應用程序部署到 – Tseng

+0

@Tseng感謝您的回覆。是的,它將被部署到Azure。您是否將工作者角色建議爲使用Hangfire/Quartz.NET的替代方案,或者您是否建議在工作角色中使用Hangfire或Quartz.NET? WebJob是否可以替代工人角色? – aw1975

回答

1

我們使用一個簡單的「任務運行器」應用程序,它可以通過命令行參數來確定要調用哪個Web/Windows服務。然後使用Windows任務計劃程序調用「任務運行程序」應用程序。所以,如果您的目標完全.NET CLR那麼工作之前將現在的工作任何圖書館都無所謂什麼服務或者什麼技術它是寫在。

3
  • 。這在RC2中沒有改變。 Azure WebJobs是另一種解決方案,除了那些你已經提到過的。

  • 對於CoreCLR我不知道任何已經兼容的框架。您可能不得不提出自己的解決方案,或者通過使所有計劃的代碼完全在.NET中,或通過在.NET中創建一個調用CoreCLR的小型應用程序,來分兩部分來破壞應用程序。

1

你可以隨時給Quartz v3 build一個去。它已經在CoreCLR上運行,並且測試非常順利。您需要使用Visual Studio自己從源代碼構建。 See the v3 branch

此刻最大的缺陷是不兼容的序列化,因爲v2只能將二進制序列化到數據庫(作業數據映射等),v3僅支持JSON作爲序列化格式。這個故事可能會改變,因爲他們打算把BinaryFormatter帶回來。

所以我會說,如果你很高興使用RAMJobStore沒有數據庫持久性,你應該是金。它可能會比手工製作的解決方案更好。

+0

謝謝 - 我一定會試試這個。我在之前的工作中使用了Quartz,它對我們非常有用。 – aw1975

5

手動方法:

  • 創建包含一個Service長期運行的代碼,優選async
  • 一個while循環添加到服務與暫停(也優選async
  • 呼叫的長期運行在Task.Run(() => ...的新線程中或線程池(或在傳統Thread中)的服務類的方法。
  • 在Startup.cs中創建該類的一個實例
  • 在啓動中使用services.AddSingleton(MyServiceInstance);Configure(...。cs
相關問題