如果你有一個包含你的對象的外部服務層(這是獨立於.NET)(在你的情況下,File.cs等),然後使用內置的Windows scheduler是好的(它觸發可執行用戶定義的特定時間的代碼)。
爲此,您可能需要創建一個控制檯應用程序,該應用程序具有對服務dll的引用以及數據庫的連接。
控制檯應用程序
在Visual Studio中,轉到文件 - >新建項目 - >的Visual C# - >控制檯應用程序。
在App.config文件中,可以將連接字符串添加到數據庫。例如:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="SchoolDBConnectionString"
connectionString="Data Source=...;Initial Catalog=...;Integrated Security=true"
providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
然後,您可以設置對您的Service.dll的引用,該引用應該具有可訪問的數據庫上下文,例如, DataContext db = MyService.Data.DataContext();
所以不是:
var modFile = new File{ FileID = 2, Votes = 0};
db.Entry(modFile).State = EntityState.Modified;
db.SaveChanges();
你可以使用:
db.Files.Where(s => s.Votes > 0).ToList().ForEach(s => s.Votes = 0);
db.SavesChanges();
您可以運行在發佈模式項目,並抓住相關的DLL和EXE文件。在任務計劃程序中,您可以創建運行特定exe的任務。
服務
從技術上講,你不必有這種隔離級的 - 但在我看來,這是很好的做法。你可以創建一個對你的MVC項目的引用,但我個人不會。
創建一個服務層..
右鍵單擊您的解決方案(如你的MVC應用程序內) - >添加 - >新建項目 - >的Visual C# - >類庫
在這個項目中,你應該在這裏移動所有的對象(File.cs等)。然後,您可以通過右鍵單擊「引用」並選擇剛創建的服務庫來在MVC項目中創建對此項目的引用。您可以對控制檯應用程序執行相同的操作。
這會在您的MVC應用程序和具體(業務)邏輯之間創建一個隔離層。
否則,如果您必須在ASP.NET內安排您的任務,請查看Scott Hanselman的post - 他編譯了一個在特定時間安排作業的庫列表。理解ASP.NET應用程序應該只有確實處理用戶請求和響應是非常重要的 - 線程有點危險。
由於用戶請求,Web應用程序應該採取行動。從您的Web應用程序內部進行預定活動是不合適的。 –
你能指點我一個教程嗎? –
關於未執行預定操作的教程?不,不是。 –