2010-09-28 224 views
8

目前我們在解決方案中有12個WCF項目。每個項目本質上都是自己的終端。例如,「Order」WCF項目是Order.svc端點。這12個端點由單個WebHost項目公開。 WebHost項目有12個.svc文件指向每個相應的程序集/名稱空間。多個WCF項目與解決方案中的單個項目

我的問題圍繞使用一個項目(一個程序集...一個DLL)vs多個項目(多個程序集...多個DLL)。有什麼優點/缺點?最終的結果是一樣的......你有一個WebHost項目公開了這些端點指向一個程序集/名稱空間。除非你只需要在bin目錄下管理一個.dll和12個.dll文件。

對我的優勢,一個項目: 維修 - 而不是12個項目,每個到我們的接口,datacontracts,公用事業等多個引用,我們已經在一個地方集合中引用一個項目。然後,我們可以部署一個DLL並利用負載平衡器來均勻分配。即使我們明確地爲每個服務器(如此,4個服務器)託管3個服務,但如果服務器關閉,負載均衡器可以調整,其他3個服務器將擁有他們需要的並自動處理所有事情。 (我想對於.dll文件也是如此......只需確保所有12個.dll文件位於每臺服務器上即可)。

構建時間 - 更少的項目=更快的構建時間。 Visual Studio不必執行儘可能多的鏈接和複製.dll遍佈整個地方。更快的構建時間=更高效的開發人員和更快的構建和部署。

我目前有幾個同事關心將我們所有的WCF服務「緊密地」結合到一個項目中。對我來說,他們都是WCF服務,爲什麼不把它們放在同一個項目中?端點(.svc文件)是將它們分開的東西。我也聽到了這個問題:「死鎖怎麼辦?」。那它呢?這是一個有效的問題/關注嗎? (我真的不知道)

也有人提出有關如果.dll變得腐敗的問題。如果是,那麼所有的服務都停止了。再次...這是一個有效的關注?

我從Microsoft和其他人那裏看到的所有例子都有一個項目中的WCF服務,它們由不同的類隔開。接口在他們自己的項目中......在另一個項目中的數據合同等等。

那麼,你需要什麼?如何在Visual Studio解決方案中組織多個WCF服務?向我學習。

回答

3

我們很難學會這一點。我們最近有一個項目,我們從自己的項目中開始每項服務,最終轉換爲在同一個項目中提供所有服務。具有在不同項目中的東西的主要問題是:

  • 部署:你創建12個MSI軟件包一個爲每個服務,他們將被部署到單獨的網站。操作系統對運行12個安裝腳本和監控12個站點有什麼看法?
  • 服務是否相互呼叫,如果是,那麼通過WCF可以很慢,配置可能是一場噩夢,12個服務調用11個服務,配置dev,test和prod。
  • 同樣在互相通話的服務上,與直接dll調用相比,性能有所下降
  • 服務是否具有相同的版本,例如數據庫更改會導致所有服務發生更改。如果是的話,你總是需要部署所有服務。這需要比單一服務更長的時間,您的停機時間會更長

我們對接口(合同)和數據傳輸對象使用單獨的項目。

1

一般情況下,如果我的svc文件存在於同一個程序集中,那麼它們共享一些目的。如果svc在同一個程序集中共享足夠的共同目的,那麼該實現也具有足夠的共同目的以存在於一個程序集中。

把它們放在單獨的程序集中沒有任何問題,但也沒有任何好處。它更多的是建立一個結構清晰,可維護的解決方案 - 主要是個人喜好/標準/風格問題。

獨立的實現,如果你通常將它們分開 - 也就是說,如果他們給顯著不同的結果,或作爲您的解決方案的獨立組件。如果單個組件會很笨重,那就把它分開。

更注重合同和實現。他們服務於不同的(技術)目的,您可能希望公開合同而不公開實施。儘管如此,我寧願將它們放在單個程序集中,但用明確的命名空間隔開。較少的組件通常更易於管理。

0

記住,你不必部署你的項目,你管理自己的發展同樣如此。作爲構建步驟的一部分,您總是可以使用像ILMerge這樣的東西將多個dll合併到一個dll中。

我總是推薦使用Software Factory(也稱爲Web Service Software Factory)開發一些服務,http://servicefactory.codeplex.com/這有助於從MSFT Patterns & Practices團隊實施一系列「最佳實踐」。這是學習一些最佳實踐的好方法,但是一旦你瞭解了它們,通過與開發團隊進行良好的指導/代碼審查來強制執行它們通常會更好/更容易。這樣你可以使用在你的環境中工作的東西,而不是使用那些妨礙你的環境的東西。

如果你有12個服務,你如何管理可能發生的配置地獄?尤其是當你有依賴其他服務的服務時。最終將所有這些以及任何自定義綁定和行爲放入配置中可能是部署的噩夢。另外,您如何讓企業中的其他人瞭解您的服務?是否都通過口耳相傳,良好的構建管理和源代碼控制完成?

相關問題