2009-11-12 244 views
2

我們有一個內部Web系統來處理我們公司的大部分業務。數以百計的用戶全天使用它,這是非常高的優先級,並且必須始終運行。我們正在考慮轉向ASP.NET MVC 2;目前我們使用網頁表單。使用Web表單的優點是我們可以即時發佈單個網頁,而不是部署整個應用程序。如何部署Web應用程序

我很想知道其他人如何部署他們的應用程序,同時仍然可以讓用戶訪問他們。在Visual Studio中使用部署工具會導致暫停。我正在尋找一種超快的方法。

如果您有高優先級的錯誤修復,例如,是否明智地將Web表單與MVC混合,並用代碼隱藏的Web表單替換視圖,直到您做出下一個不是Web的正確發佈形成?

我也看到了在同一臺服務器上同時運行相同的Web應用程序的其他解決方案,並且要麼在IIS中更改根目錄,要麼將web.config更改爲指向不同的文件夾,但與此相關的問題是,即使是爲了簡單的錯誤修復,您也必須完成整個構建和部署。

編輯:爲了詳細說明,你怎麼不部署在應用造成任何對用戶的干擾。

其他人如何做呢?

回答

1

我想你也可以運行未編譯的MVC應用程序?只需在運行中替換.cs /視圖等。

websetup卸載/安裝非常快,但它會殺死應用程序池..這可能會導致問題。取決於您的網站的建立方式。

最流暢的方法是在兩臺服務器上運行它,並將會話存儲在sql server或共享狀態中。然後,您可以將S1拉下並修補它=>再次將s1拉回來,並將S2拉下=> S2補丁,然後重新提起。 Al認爲,如果您對代碼的會話部分進行任何重大更改,這可能不起作用。

+0

是的,我希望這是答案。您也不需要兩臺服務器,只需在一臺服務器上運行它,並通過asp實例共享會話狀態,這意味着您不必使用SQL,因此速度更快,因爲它是「InProc」。 – Kezzer 2009-11-12 10:32:33

0

您的網站有多個實例在多臺服務器上運行。做到這一點的最佳方式是擁有一個生產環境,一個測試環境和一個開發環境。您可以創建測試用例並在每次有新構建時運行加載,如果可以通過所有測試,則將該版本轉換爲生產;)。

+0

是的,但問題是如何將其投入生產而不會對用戶造成干擾? – Kezzer 2009-11-12 09:25:06

0

您可能有兩臺物理服務器,每臺運行IIS並託管該站點的副本。或者您可以在SAME服務器上的不同IIS端點下運行該網站的兩個副本。 無論採用哪種方式,您都需要在生產中至少使用兩個網站副本。

我把這稱爲A <→B開關法。

首先,讓每個生產站點在不同的IP地址上。在您公司的DNS中,爲其中一個IP添加一個條目,並給它一個非常短的TTL。然後,您可以更新站點B,並通過點擊IP地址對站點進行預先測試/預熱。當它準備好時,將您的DNS切換到新的站點B.一旦您的TTL過期,您可以取下站點A並更新它。

使用共享會話狀態將有助於最大限度地減少站點之間的用戶轉換。

+0

我不會推薦使用DNS切換實例。在什麼時候你確定所有的客戶都會解決新的IP?例如,FireFox瀏覽器具有自己的DNS緩存,因此用戶可能會比預期的長得多。加短TTL增加了DNS查詢。使用一些SLB技術,您可以抽出一個節點進行維護,而不必擔心DNS傳播和緩存問題。 – Riko 2013-06-07 14:31:46