2010-08-31 68 views
4

首先,如果這個問題以前曾被問過,但是我找不到直接回答這個問題的道歉。WCF服務契約設計。用例控制器是否合適?

這是我的問題。我已經繼承了一個產品,它被設計得非常靈活,以至於在(silverlight)表單上填充幾乎每個組合框和文本塊都需要一個服務請求。某些屏幕只需要15個獨立的請求就可以填充!

現在我已經多次與WCF Web服務合作過,並且將服務合約拆分成小的離散操作從來沒有太多過關,..可悲的是,這個項目並非如此。所以它讓我想知道...

還有沒有計劃在我們自己的圍牆之外暴露服務。有沒有計劃爲此特定服務編寫另一個客戶端。所以我不能在服務端寫一個'用例控制器'嗎?所以,在 '創建投訴' 屏幕,而不是像請求列表...

  1. GetComplaintTypes
  2. GetCustomerTypes
  3. GetAreaDetails
  4. 等等...

填充表單我只需要一個名爲'GetCreateComplaintData'的單一操作合同。當只有一個客戶端需要將所有這些請求聚合並同步化爲有意義的東西時,如此衆多的操作暴露在這樣​​的粒度中似乎很瘋狂。爲什麼不公開一些有意義的東西呢?

更重要的是,如果您不打算將服務API暴露給第三方,那麼這是否比在數據庫中暴露CRUD操作符更好?

感謝所有幫助和意見。 在此先感謝。

回答

2

我認爲你的想法很好。

作爲一種介於兩者之間的方式,您也可以考慮將多個WCF請求批量合併爲一個的方法。這種方法以及如何對其進行編程描述如下over here

+0

:-)。我正在通過一大堆代碼做這件事。這就像跑在泥裏! – Stimul8d 2010-08-31 12:22:51

+0

標記爲有用的鏈接正確。 – Stimul8d 2010-08-31 13:54:50

+0

你應該看看http://code.google.com/p/agatha-rrsl這是一個基於Davy Brion的原創想法開發的開源項目。 – 2010-09-01 00:47:49

1

我想你首先必須確定性能問題的確切位置。 IIS無法處理您發送給它的請求數量的確是真的嗎?或者每個請求都花費太長的時間,因爲數據庫無法提供數據,並且它看起來像IIS無法承受因此造成的壓力。

我不相信有以下情形的兩者之間的真正區別:

  • ,每執行一個數據庫select語句小的請求。
  • 一個執行大量數據庫選擇語句的大型請求。

當然,我不確定你的具體情況,但在性能方面,事先知道你爲什麼要優化是明智的。

+1

連接數量有所不同。 – 2010-08-31 12:33:16

+0

我看到的差異是我發送/接收的報頭數據與實際有效負載差不多。另外,在Silverlight客戶端中同步這些調用也是一件非常痛苦的事情。 – Stimul8d 2010-08-31 12:35:49

+1

所有的頭部開銷可能是一個問題,我明白這一點。而Silverlight應用程序的異步特性並不會讓它變得更容易,我曾經遇到過這種情況。我想說的是,你應該事先確定你正在解決正確的問題。祝你好運與應用程序。 – 2010-08-31 17:05:18

1

業務邏輯頂端的WCF服務應該暴露高級業務操作的正面而不是低級別的CRUD操作。 CRUD操作服務用於公開數據(如WCF數據服務)。

+0

Web服務做什麼但暴露數據?我同意這是一個壞主意,但從概念上說,那裏沒有真正的區別嗎?我的意思是,對於大多數位於CRUD操作系統之上的應用程序,那裏有什麼業務邏輯? – Stimul8d 2010-08-31 12:41:21

+1

分佈式接口不應該健談。在最好的情況下,這意味着分佈式系統的客戶端應該能夠使用單個Web服務調用來執行單一操作以減少往返行程。在你的情況下,行動是「準備表格」。由WCF公開的服務外觀應收集來自CRUD操作的所有數據,並將其發送回單一響應。 – 2010-08-31 12:55:12

+0

同意所有觀點。我只是說...對於很多'數據'應用程序的形式,這兩者之間沒有太大的區別。 – Stimul8d 2010-08-31 13:19:48

0

用於使用與WCF一個CRUD圖案曝光從DB數據的最簡單的方法是使用WCF數據服務。實際上,您不會在服務器端開發任何比想要公開的模型更多的東西,如果您使用它來訪問數據庫,也可以從EF模型自動推斷出它。

Pablo。