2011-05-18 26 views
2

之間的我有都包含在公共子目錄淨股的dll兩個Web服務

CompanyName\Service1 
CompanyName\Service2 

每一個目錄都有一個包含它的dll一個bin文件夾下面兩個Web服務。我現在已經到了一些地方,其中一些代碼已經重新構建,並且有相當多的常見組件,我希望能夠「共享」它們。什麼是最好的方式去做這件事?以下是我找到的解決方案列表(以及否定)。

  • AssemblyResolving - 安全問題。
  • codeBase web.config中的元素 - 組件位置的硬編碼路徑。
  • GAC - 目前還沒有我們的產品使用GAC,我個人對使用它的知識非常有限。這可能只是對未知的恐懼。
  • 在兩個位置放置程序集 - 難以更新原位補丁。需要確保文件在所有位置被替換。

我是否缺少對我有幫助的其他內容?有人會推薦使用上面列出的任何選項嗎?

此外,我不能將這兩個服務合併爲第三方當前使用的服務(它們分別構建)。

+0

如果你不改變你的DLL的代碼的時候,然後,將裝配在兩個位置。或者如果你有一個自動構建過程的DLL有生成腳本將輸出DLL複製到兩個文件夾如果可能的話。 – Aravind 2011-05-18 12:37:01

+0

您對兩個地點的說明「難以更新原地補丁」實際上是錯誤的。通過共享相同的物理組件,如果常用程序集需要更改接口或進行其他重大更改,則會更難協調對其中一個或另一個Web服務的更改。 – Tao 2011-05-18 12:44:12

+1

我不明白......難道你不能只是將兩個項目的引用添加到包含共享代碼的新項目中?當建立一個特定項目時,參考將導致共享項目被建立 – Simeon 2011-05-18 12:45:01

回答

3

我會去爲GAC,因爲解決了您列出的所有其他問題, 加上看起來很自然,共享庫將位於同一位置。

使用GAC,你就需要強名的dll,並在GAC砸在安裝時 它也給你很好的並排版本控制選項(一個WS使用版本1.0.0.0,另可使用1.0.0.1)

+0

只需添加一個警告,即項目將繼續查看GAC中的舊版本,直到與新版本重新編譯,或者web.config更新爲包含assemblyRedirect條目以強制使用新版本。 – Andy 2011-05-18 12:48:12

+1

正確 - 在每次需要部署核心代碼時發生重大變化時,在GAC中註冊的部署開銷遠遠超過共享代碼程序集重複的缺點(在我看來,因此我們有單獨的答案:))。 – Tao 2011-05-18 12:49:57

+0

@Andy - 不是默認的程序集引用選項 - 使用最新版本? – Menahem 2011-05-18 13:41:15

0

另一種選擇是將文件放在一個位置並使用符號鏈接鏈接到它們。 This線程解釋命令。

我沒有這方面的經驗,所以不會推薦它。

+1

壞主意 - 這FORCES兩個Web服務在覈心代碼發生突變時同時更新。 GAC解決方案在正確應用時非常凌亂/沉重但安全,重複部署安全且簡單。 – Tao 2011-05-18 12:56:39

1

兩個位置。通過這種方式,您可以通過替換該bin文件夾中的文件,在一個版本中發佈對通用代碼的更改(界面更改/中斷更改),而不會危及/中斷其他Web服務。

更新:這有相同的「並排側版本」優點使用GAC,沒有任何協調出版的複雜性,強命名的要求等

2

你最好最好的是幾乎可靠地一次更新兩個服務。如果這是您擔心的事情,請查看您的部署過程。

另一個真正的選擇是使用GAC。 GAC帶有它自己的問題,例如必須強調名稱/簽署組件以及更多部署問題。

關於構建系統,如果您始終同時構建和部署兩個Web服務,那麼您將不必擔心混合匹配,因爲您指出程序集需要在服務之間保持相同。如果你沒有使用CI系統,我建議你啓動一個,TeamCity是一個很好的開始,它是免費的(對於數量有限的用戶/項目 - 足夠讓你開始)。然後直接從CI部署,或直接從那裏生成的包中部署。我承認,CI解決一個問題有點難度,但如果你長期接受它,它可以幫助你的生活更輕鬆。