1

我正在構建一個ASP.NET網站,該網站將從用戶收集數據並將其提交給第三方Web服務。 Web服務有點不可靠,因此有一個備份服務。提交併監控不可靠的web服務

如果對主要服務的調用失敗(超時或其他錯誤),那麼我需要在靜態類中翻轉一下,這會使系統跳轉到使用次要服務。

此時,我需要開始輪詢主服務(使用虛擬數據)以查看它是否備份(在這一點上,我將收到OK代碼作爲回報)。在這一點上,我需要將這個位反轉回來,以便網站再次開始使用主要服務。

我已閱讀過這篇文章Should I use a Windows Service or an ASP.NET Background Thread?,我認爲將代碼分離到Windows服務中將是執行輪詢的最乾淨的方法,但是如何與Web應用程序進行通信。

我以爲有一個想法就是暴露一個web服務,Windows服務可以用來與webapp進行通信,但這看起來既凌亂又過度殺手。

我很感激你的想法和經驗執行類似的任務。

謝謝

回答

1

我認爲Windows服務是絕對的路要走。

至於服務和您的網站之間的溝通,最好的答案取決於您的解決方案的規模和規模。如果你正在構建需要可靠的東西,我建議你在ASP.NET站點和Windows服務之間實現某種排隊。這裏也有很多選項,具體取決於預算和能力:BizTalk,MSMQ和SQL Server隊列(SSIS)。另外,如果你正在尋找更小規模的東西,我建議你把它放在某個地方的數據庫表中。

我會避免使用文件系統上的文件,因爲您會遇到文件鎖定和多線程問題。我也會避免直接與服務通信,因爲如果服務因任何原因失敗,您可能會丟失內存隊列。

編輯補充:

如果可靠性是不是一個問題在這裏,你可以使用WPF爲您的網站和你的Windows服務之間的通信託管服務命名管道。這避免了傳統Web服務通常涉及的大部分開銷,而且速度驚人。唯一不利的一面是自承載WPF服務很棘手,難以保持服務。

+0

嗨,約翰,第三方系統是一個標準的.NET Web服務(.asmx),如果請求超時或錯誤,我計劃在那一刻重新提交當前請求到二級服務 – 2009-06-23 10:52:19