2012-06-07 25 views
0

我正在用C#編寫一個Web服務,並且是一個徹頭徹尾的新手。請原諒我,如果我問的是死的愚蠢。我有一組Web服務使用的dll。我想實現如下:
手動刪除和使用C#web服務中的dll

  1. 讓我們假設這些DLL first.dll,second.dll和common.dll
  2. common.dll在first.dll和second.dll引用(common.dll包含在first.dll和second.dll中實現的接口)
  3. common.dll具有first.dll和second.dll中包含的類的靜態字典。根據需要實例化此字典中的類。
  4. 每當我有一個新的common.dll準備發佈,我想手動刪除common.dll文件,並在系統上線/運行與common.dll 的新版本替換它。

目前,我得到當我試圖執行步驟4以下錯誤: 「不能完成此操作,因爲該文件是在vshost32-clr2.exe開」

它是這樣,我完全失去了一些東西?

+0

爲什麼你會認爲你可以覆蓋文件,而它是打開/正在使用? –

+0

不要在Visual Studio中運行Web服務。嘗試在IIS中託管它。 –

+0

@Frank,它不是關於一個文件被打開/使用,它是關於一個dll被引用。 – Cik

回答

0

24/7可用性不是一件便宜的事情 - 你真的需要嗎?

一個簡單的方法是,當你升級你的應用程序重新將流量路由到不同的服務器。您將同時運行兩臺服務器並驗證新的服務器是否正常,並將流量切換到新服務器。您可以使用DNS條目或某些軟件/硬件路由器來重定向流量。

如果你真的想立即替換組件,你可以這樣做。您可能需要足夠的代理對象層,並可能將自己的最終程序集加載到自定義應用程序域中。您可以簡單地將DLL複製到IIS上Web站點的根文件夾,並希望應用程序域的回收能夠正常工作,並滿足您的「永遠在線」要求。

注意:「手動刪除」和「系統始終運行/運行」不應該出現在同一個系統中......除非您知道一個人可以完美地執行相同的無聊數十個步驟在一天中的任何時間...

+0

謝謝@Alexei。你在答案中提供的可能性給了我一個思考過程的方向。我會考慮「24/7可用性不是一件便宜的事 - 你真的需要一個」,但:) – Cik

0

您必須關閉託管網站。複製新的程序集。然後重新啓動網站。

+0

不對;在我們的系統中,我們隨時部署新版本的.dll文件。此外,提問者希望系統保持生命。 – Filip

+0

@OmegaMan,就我的問題而言,Filip的回答是正確的。 – Cik

+0

@AakashRoy,在運行時引用程序集並將其加載到內存中。直到你找到那是什麼並將其逆轉,你將繼續存在這個問題。 – OmegaMan