2009-09-30 54 views
5

我被要求研究處理我們應該構建的應用程序的方法。假設用C#編寫的Windows窗體假設這個應用程序將直接向服務器發送命令,但是如果應用程序處於脫機狀態,則必須保持狀態,就好像它已連接一樣,然後同步併發出數據更改/命令服務器一旦連接就是與.NET的離線同步選項

我不確定從哪裏開始尋找。這與Google Gears類似,但如果我們使用Winform路由(看起來很可能,考慮到應用程序需要Web應用無法執行的其他功能),我不認爲我有這種選擇。 Microsoft Sync framework是一個可行的選擇嗎? Silverlight是否做這樣的事情?任何其他選項?我已經搜索了一下,但希望社區就什麼是最好的情況進行投入。

回答

9

Microsoft Sync Framework肯定支持您描述的場景,雖然我會說它讓它工作起來相當複雜。

有一兩件事要了解有關同步框架是,它實際上是兩個截然不同的框架航運在同一個包:

  • 同步框架
  • ADO.NET同步服務V 2

ADO.NET Sync服務是迄今爲止最容易設置的,但它們被限制爲同步兩個關係數據存儲(儘管您可以將Web服務設置爲兩者之間的遠程門面)。

核心Sync Framework沒有這樣的限制,但實現起來要複雜得多。當我大約六個月前使用它時,我發現最好的學習來源是SDK,特別是文件/文件夾同步示例代碼。

據我所知,在兩個「框架」之間幾乎沒有代碼和類型的共享,因此您必須選擇其中一個或另一個。

無論在哪種情況下,對於如何託管同步代碼都沒有限制,因此Windows窗體只是衆多選項中的一個。

+0

非常豐富,謝謝。 – Chris 2009-09-30 19:35:36

2

如果我理解正確,這聽起來不像是我想要保持兩個數據庫同步的實際數據同步問題。聽起來更像是你想要一個可靠的機制讓客戶端在連接不穩定的環境中調用服務器上的函數,並且如果連接當時不存在,只要連接返回時就想要調用這個函數向上。

如果我的理解是正確的,這是一個選項。如果沒有,這可能不會有幫助。


這是一個非常簡短的回答進行了深入的問題,但我們也有類似的情況,這是我們如何處理它。

我們有一個客戶端應用程序,需要監視商店中的PC上的一些數據。當某些事件發生時,此客戶端應用程序需要更新公司辦公室的服務器,最好是Real-Time。但是,連接不是100%可靠的,所以我們需要類似的機制。

我們通過嘗試通過Web服務寫入服務器來解決此問題。如果調用Web服務時發生錯誤,則將該命令序列化爲名爲「等待上傳」的文件夾中的XML文件。

我們在每個n分鐘的時間設置的定時器上運行我們的客戶端應用程序。計時器過後,它會檢查此文件夾中的XML文件。如果找到,它會嘗試使用保存在文件中的信息調用Web服務,依此類推,直到成功爲止。呼叫成功後,XML文件被刪除。

這聽起來很詭異,但編碼很簡單,並且已經完美運行了五年了。這實際上是我們最全面的無故障應用程序,我們已在其他地方成功實施了該模式。

+0

正確的解釋,是的。我正在考慮使用MSMQ,因此它是一種即忘即用的方法,它會一直試圖到達目標爲止,但它與您的方法基本相同。謝謝! – Chris 2009-09-30 19:30:43

+0

MSMQ也是一個不錯的選擇。我們並沒有使用它,因爲我們不希望將其設置在所有客戶端上,我們採取的方法不需要額外的安裝團隊和管理員的步驟,儘管它在開發團隊中採取了額外的步驟。但是,如果MSMQ會爲你工作,那麼我會說這是一個非常好的選擇。 – David 2009-09-30 19:33:00

+0

現在你可以建議任何東西。 msmq可以在離線時調用api的相同應用程序中使用嗎?我需要msmq接收器嗎? – coder771 2017-09-01 10:54:11