2012-06-20 87 views
0

我有下面的代碼,當點擊一個鏈接,用戶可以保存返回.CSV文件:如何以指定的時間間隔/時間自動導出文件?

public FileContentResult DownloadCSV() 
{ 
    StringBuilder sb = new StringBuilder(); 
    var props = typeof(PenCalcModel).GetProperties(); 
    var penSummary = PenSummaryReport(new DateTime(DateTime.Today.Ticks, DateTimeKind.Utc), new DateTime(DateTime.Today.AddDays(1).Ticks, DateTimeKind.Utc), ""); 

    foreach (PenCalcModel item in penSummary) 
    { 
     sb.Append(string.Join(",", props.Select(p=>p.GetValue(item,null).ToString()))); 
     sb.AppendLine(); 
    } 

    return File(new System.Text.UTF8Encoding().GetBytes(sb.ToString()), "text/csv", "PenReport.csv"); 
} 

有沒有一種方法,我可以將它設置成有出口這種完全相同的.CSV文件從服務器到網絡驅動器每X小時?

+0

是的,有用戶點擊鏈接每X小時!開玩笑。你能否澄清你的意思是「出口」?從哪裏出口到哪裏?如果通過導出,你的意思是下載,那麼下載是從客戶端發起的,所以你不能在服務器上做任何事情來幫助它。另一方面,在客戶端上,您可以創建一項工作,一項服務,一種可爲您每小時下載x的腳本。 –

+0

@zespri從服務器導出到聯網驅動器。更具體地說:Web應用程序在Sybase數據庫上運行LINQ-to-Entities查詢,將生成的IEnumerable轉換爲該.CSV文件。 – Kittoes0124

+1

最簡單的(就開發工作而言)將是創建一個獨立的應用程序來執行導出操作,並將Windows任務計劃程序作業設置爲按計劃運行。 –

回答

3

將任何設置爲計劃任務/工作都不應該是Web應用程序的責任。該應用程序可以隨時回收,甚至可以中斷這項工作。這些類型的實現應該是Windows服務或服務器上某種基於任務的作業的責任。簡而言之,不要在網絡應用程序中執行此操作。

+0

好的,那麼我會如何去做這個外部的網絡應用程序? – Kittoes0124

+1

如果您正在運行Windows服務器,則應該考慮創建Windows服務。您可以使用SQL爲您或SQL Reporting Services構建文件,甚至可以使用服務器上的計劃任務執行的批處理文件。 –

1

我可能會使用powershell腳本來下載內容和計劃的Windows任務來觸發它。有幾個下載內容的例子在這個問題:download url content

+0

根本不是我在找什麼,但那很有趣。頁面上的內容採用易於瀏覽/閱讀的方式進行格式化。我的下載鏈接中的內容被格式化以便於操作。這是因爲普通用戶只想瀏覽並快速瀏覽我的數據,而高級用戶可能希望下載並將其轉換爲對他們特定需求/需求更有用的內容。 – Kittoes0124