2010-08-02 64 views
1

我正在看編寫一個WinForms應用程序,並越來越難以理解似乎是一個簡單的問題。N層與C#?

有一個服務器和數據庫(SQL Server)開放的端口是HTTP,HTTPS

有一個WinForms客戶端。它需要將TCP/IP流(可能是HTTP,SOAP,REST)連接到服務器。

有時WinForms客戶端脫機,然後WinForms客戶端將其數據存儲在數據庫中。

當WinForms客戶端聯機到服務器時,它將數據同步到服務器,從服務器獲取所有最新數據並更新本地數據庫。

我該怎麼做?

新手問題

+0

相關問題。是否有一種服務構建器,或者可以與N層一起使用的ORM層或者以這種方式使用? – buttercup 2010-08-02 14:46:58

+0

看到我的編輯相關答案。 – marr75 2010-08-03 04:50:27

回答

2

正如你所承認的,這個問題表明你可能不知道從哪裏開始尋找如何構建這種應用程序。

我會從這裏開始:http://msdn.microsoft.com/en-us/library/ms973279.aspx

你所描述的離線架構是一個新手有點艱難比不支持此,考慮使應用程序僅聯機工作,再加入離線功能。另外,如果你有一個Web服務器,你幾乎總是會使用HTTP,SOAP和REST是位於HTTP之上的策略。我不建議新開發人員查看使用直接TCP/IP的任何服務器通信。

編輯:回答相關問題 - 有大量的ORM和服務構建者,並不是他們中的很多人都支持脫機工作流程,但ODX確實如此,但它可能有點過時。 NHibernate和Castle Project中的任何項目都是非常受歡迎的組件,用於您要做的事情。

2

不知道如何積極,這是仍然由微軟支持的,但你可以看看智能客戶端軟件工廠,它似乎支持離線模式和智能重連像你所需要的。

http://msdn.microsoft.com/en-us/library/ff709809.aspx

+0

計劃未更新智能客戶端軟件工廠。 – 2012-08-10 14:15:27

0

一般情況下,你需要一個本地數據庫,或者至少一個本地緩存。

+0

嗨, 本地WinForms客戶端上已經有數據庫。只是不確定如何同步到服務器。 – buttercup 2010-08-02 14:52:41

+0

正如nonnb所說,那部分並不那麼簡單。最簡單的方法是保持流動單向性,通過用真實數據庫中的數據提取替代本地數據庫。否則,您可以使用時間戳幫助您確定自上次同步以來客戶端上的哪些記錄已更改。但是,您還必須確保不覆蓋其他人的更改。 – 2010-08-02 14:59:40

1

你可以通過'服務'思維來解決這個問題 - 寫一個WebService(最好是一個WCF服務) - 在你的Winforms應用程序之間形成同步層。和遠程數據庫。

所以,你應該有你的
1.本地WinformsApp。與本地數據庫(如功能性/輕量,你希望它是)
2. WebService的
3.遠程app./DB

1

恕我直言,這通常不是那麼簡單,因爲它聽起來

  • 如果你能去到DB數據庫,然後SQL複製可能是同步的最簡單的機制。
  • 然而,因爲它聽起來就像你正在使用SOA方法,你可能需要看看這些離線支持內置的框架,如耳鼻喉科庫Composite Application Block和智能客戶端軟件工廠
  • 你也可以看看使用隊列(例如MSMQ)適應網絡連接問題。