簡體   English   中英

C#.NET新手幫助…最佳實踐

[英]C# .NET Newbie Help…Best Practices

我需要一些如何執行我需要執行的特定任務的指導...

我有一個數據庫表,其中包含用戶對excel電子表格的請求。

該表中有一個狀態欄,指示請求所處的步驟。

我需要編寫某種服務,以便能夠繼續檢查該表的狀態列。

當它找到包含所要查找狀態的記錄時,應從記錄中提取數據並調用另一個創建excel電子表格的應用程序。

(注意:我編寫了一個程序,其中包含一個類,該類創建excel電子表格並將其保存到本地硬盤中。所有這些都將托管在同一服務器上)

提前致謝!

您將要考慮創建Windows服務或運行作為計划任務設置的檢查代碼的進程。

我優先使用Windows服務,因為它們已安裝,始終在啟動時啟動並在一致的環境中運行。 計划的任務取決於未觸摸的任務以及可執行文件未移動。

Windows服務/計划任務的主要部分將是計時器。 您可能需要每五分鍾檢查一次數據庫表,或多或少地根據您需要的頻率檢查時間。

是一個不錯的入門資源。

如果我是你,我會采取雙重手段。

我會將所有業務“邏輯”放入C#庫中(例如widget.core.dll)。

然后,在您的服務應用程序中,僅具有啟動和停止服務的最低要求(即,不超過VS生成的標准樣板),並直接調用您的core.dll。

還要編寫一個控制台應用程序,如果需要,該應用程序會使用一些輸入參數,並使該調用與您的core.dll中的方法完全相同。 同樣,此控制台應用程序應僅具有幾乎沒有足夠的代碼來處理參數並適當地調用核心庫。 然后可以手動或作為計划任務調用此控制台應用程序。

通過從服務或控制台的實現中拆分核心庫,您將使測試應用程序變得容易得多,因為所有的實際流程邏輯都應位於core.dll中,並且可以從單元測試,測試代碼或控制台應用程序中調用。

您只需很少的額外開銷,即可為用戶提供將應用程序既可以用作服務又可以用作預定任務的靈活性(取決於他們的喜好,環境等)。

service.exe --
             |
             --> core.dll
             |
console.exe--

參考您的帖子:

您可以做幾件事:

  1. 您可以按照您的建議進行操作,有一個程序(一個Windows服務聽起來很合適),該程序會定期查詢您的表(聽起來像select * from tableName,其中field = something),然后執行以下操作之一:只需從您的應用中調用所引用的必要方法作為該程序中的dll。

  2. 在您已經編寫的程序/ exe中包括對表的檢查,然后通過Windows計划任務界面對其進行計划。

編輯>我認為2可能是最好的。 為此,根據檢查的頻率來編寫Windows服務實在是過頭了,盡管編寫所有代碼來創建/管理/重新啟動/不是Windows服務(盡管很有教育意義),卻浪費了很多精力。

為了回應您在評論中的其他問題:

“我將如何調用實際創建電子表格的應用程序?”

我將在core.dll中包含用於創建電子表格的“應用程序”(除非您有充分的理由,我認為庫越少越好-因為要跟蹤的東西更少)。

您將需要在服務或命令行應用程序將使用的DLL中包含一些公共方法。

最有可能是一種方法,用於調用服務可以使用的System.Threading.Timer()對象。 創建電子表格的方法。

如果我理解您的問題,那么您需要編寫一個循環,以定期檢查相關請求的狀態列值。 用偽代碼:

while (true)
     for request r in requests
           <check status column for r, take action as necessary>
     end for
     sleep (some interval)
end while

暫無
暫無

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

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