2010-08-05 64 views
3

我有基於ADO.NET dataservice的Windows窗體應用程序和服務器端服務。 在Windows應用程序中創建和初始化一個靜態數據服務客戶端並在整個程序中使用它是不好的做法?例如,我可以在所有打開的表單中使用它(與服務的datacontext對象綁定)來調用SaveChanges()並且不會丟失跟蹤。或者爲每個新表單創建一個服務客戶端實例更好(因爲我認爲在一段時間後一個靜態客戶端會有巨大的內存增長)?但是,當我爲每個表單創建一個新的客戶端,我假設我每次創建一個新的服務連接到服務..

可能是錯誤的,並且在客戶端應用程序中使用服務有點困惑。請幫助我理解它正確的工作方式。創建ADO.NET DataService客戶端的最佳實踐

回答

2

其實DataServiceContext類不會創建到服務的連接。它使用的OData協議基於REST,因此它是無狀態的。因此,單獨創建語境甚至不涉及服務。每個操作(查詢,保存更改)都會向服務發出單獨的獨立請求。從服務的角度來看,它只是一些無關的請求。 如上所述,對應用程序的每個「部分」都有一個單獨的上下文通常是一個好主意。什麼是完全取決於你的應用程序。如果你不打算加載/跟蹤大量的實體(至少1000s),那麼一個上下文可能沒問題。另一方面,通過簡單地放棄上下文並且不調用SaveChanges,可以在幾個上下文中「取消」更新操作,這在某些應用程序中可能非常方便。

+0

謝謝!正是我想要的答案......我會詳細閱讀OData協議,不要在沒有準備的情況下提出這些問題。 – 0x49D1 2010-08-06 10:12:06

0

我會說:這取決於。 ;)當你直接使用實體框架時,你的問題對你必須做出的決定很熟悉。所以我建議你搜索這些文章並提取他們的觀點。

我自己的EF經驗告訴我,具有多個工作流程的應用程序應該爲每個工作流程提供一個上下文。尤其是,當同時啓動多個工作流程並且用戶可以在它們之間切換時。

如果應用程序很簡單,只使用一個上下文是正確的方法。

+0

該應用程序只用一個工作流程。現在有一個上下文,它運行良好。但會有許多客戶端與Windows應用程序,我不知道它會如何工作。謝謝你的答案。 – 0x49D1 2010-08-05 08:27:25

+1

所以你擔心服務本身而不是客戶端應用程序。如果我錯了,請糾正我。 但後來我不明白你的帖子。您必須爲每個將啓動的客戶端應用程序創建至少一個服務連接。這是一個無法避免的事實。該服務將處理它。但我對WCF DataServices的可伸縮性一無所知。我認爲這對於幾個小而簡單的客戶端應用程序來說已經夠用了。 – DHN 2010-08-05 17:36:58

+0

我想你明白我的意思。所以問題是:我應該創建一個連接,還是其中一個應用程序中的很多.. – 0x49D1 2010-08-05 18:52:14