2012-07-15 64 views
0

我的團隊正在撰寫一個需要輪詢第三方系統數據的Windows服務(第三方系統提供了我們使用的Web服務)。
這一過程將是這個樣子:
1.呼叫第三方WS
2.保存收到的原始數據到我們的數據庫
3.處理原始數據
4.保存處理後的數據對我們的DB
5.重複構建此輪詢窗口服務的哪個選項更好?

小組同意,我們其實有2個不同的邏輯運算:
1.獲取並保存原始數據
2.加工的原始數據並保存結果

我們正在試圖決定下列哪個設計方案是更好的:
選項1:在同一個窗口服務,在它自己的線程
選項2的每個操作執行兩個操作:在Windows服務執行第一操作,異步/單向呼叫第二次操作的wcf服務

在您看來,哪個選項更好?
如果你有另一種你認爲更好的選擇,請分享。

謝謝。

回答

1

根據您的評論,我會說,你有一個線程,每秒一次輪詢第三方服務,並開始兩項任務。

任務1將原始數據存儲到數據庫。 任務2將處理原始數據並將結果存儲在數據庫中。

如果輪詢線程檢索到1000個條目,它應該立即再次輪詢。

您可以使用System.Threading.ThreadPool或System.Threading.Tasks.Task。

2

這取決於。

鑑於您有一個明顯的順序過程,爲什麼要使用單獨的線程來讀取並處理數據?最簡單的方法將是一個循環讀取,處理它的單個線程,並且可能在某個時間點等待,因此您不受第三方的速率限制。

如果處理過程需要很長時間,您可能希望在單個輪詢線程和處理數據的一組工作人員之間分割工作。

最簡單的選項通常適合您的初始實施。在你需要之前添加線程和WCF服務調用很少是正確的。

爲了給出更好的答案,您確實需要提供更多信息:第三方服務是否限制您一次可以撥打多少電話或您可以多快地撥打電話,處理所需時間,您多久需要調查,...

+0

第三方服務位於遺留系統之上,該系統一次不支持多個呼叫。而且,它只能在單個響應中發送最多1000個實體。我們希望分離流程,因爲我們的處理可能相當緩慢,因爲它包含多個空間查詢(主要是交叉點)以及針對非常大的表格(大約3M行)的查詢。另外,我們需要每秒進行一次輪詢,我們的用戶在需要時儘快處理所處理的數據。 – ItayMaoz 2012-07-15 16:50:24