2016-06-27 32 views
1

我有一個控制器,它運行並從數據庫獲取數據,並通過電子郵件發送到客戶端。C#MVC每週運行控制器代碼

此電子郵件設置被設置爲與電子郵件收件人一起保存到表中的表單。我需要按照用戶(客戶端)在表單中定義的時間表運行此操作。在這裏客戶可以選擇每週,每兩週或每月。

從這裏和之後這是保存在數據庫中,很容易從數據庫中提取,但我需要一種方法來在客戶指定的時間(每週,每兩週或每月)運行一次, 。我正在考慮使用webjob(Azure)來做到這一點,但我不知道如何解決這個問題。

所以

  1. 是否有使用這種方法的任何問題?
  2. 其他選項有哪些?
  3. 有什麼建議嗎?
+0

看看HangFire(http://hangfire.io/)。這正是它爲 – LDJ

+0

構建的任務。不幸的是,這種類型的問題對於StackOverflow而言是無關緊要的,因爲您在徵求建議和意見,並且它非常廣泛。此外,沒有最好的辦法做到這一點(再次,只是意見)。 –

回答

2

您是否看過專爲此設計的解決方案?爲什麼重新發明輪子?

看看Hangfire.io

然後,你可以做到以下幾點:

BackgroundJob.Enqueue(BatchClient.Start()); 

或者你可以添加一個經常性的工作:

RecurringJob.AddOrUpdate(() => BatchClient.Start(), Cron.Daily); 

也有其他的選擇也值得調查例如Quartz.Net

+0

不錯的組件,但是人們怎麼能讓版本1.5並且仍然有根本問題,認真? http://hangfire.io/blog/2016/06/17/hangfire-1.5.8.html#.V2P56asZluo.twitter – Dusan

+0

@Dusan我只是給了一些選擇:)總有我也建議的石英。 –

0

我不知道這是不是最好的辦法有,但我們用這個在我們公司的項目(準確地發送定期電子郵件):

  1. 我們使用cron表達式來定義動作的頻率需要執行;
  2. 我們使用Quartz.NET獲取應該執行此操作的下一個日期;
  3. 對於檢查日期和正在運行的操作,我們使用的是一個WCF服務,它在Windows服務上運行在它自己的線程上。

它可能會因您的需要而變得複雜,但它非常靈活。您必須決定在哪裏以及如何存儲cron表達式和下一個日期。對於Cron表達式,我們使用DB保存在內存中的下一個日期。