2009-08-20 231 views
4

我們有一個長期存在的ASP.NET 3.5應用程序,我們將從運行Windows 2005 + IIS 6的物理服務器遷移到運行Windows 2008 + IIS7的虛擬服務器。新機器將承擔舊的身份 - IP,DNS等。ASP.NET服務器遷移

我們的客戶讓我們的網站長達數小時 - 有時甚至幾天。我擔心的是,當我們進行切換時,突然間所有他們的視圖狀態將無法驗證,因爲MachineKey已經改變。

這種中斷是否可以避免?我可以「設置」新服務器的machineKey與現在使用的machineKey相同嗎?我認爲它是自動生成的 - 我能找出它是什麼嗎?

或者,這甚至是值得的 - 這是一個糟糕的情況,用戶不應該期望能夠長時間打網站?

回答

4
<system.web> 
    <machineKey validationKey="Generate on your own" decryptionKey="Generate on your own" validation="3DES"/> 
</system.web> 

你是對的,移動會使所有授權Cookies無效。我相信,除非你開啓了viewstate加密,否則viewstate會沒事的。

如果您添加machinekey屬性,那麼託管站點的位置並不重要,只要該機器密鑰相同,加密和解密就可以。此外,如果您的網站託管在負載平衡的環境中,則需要/應該使用此功能。

msdn.microsoft.com/en-us/library/ms998288.aspx

2

通常這樣的遷移將是一個完全中斷。大多數網站都宣佈了這一點,並在轉換過程中放置​​了一個臨時中斷頁面。另外,我想有一段時間這兩臺機器都不可用,所以無論機器密鑰和視圖狀態如何,請求都會失敗。我會建議你強制完全停機。這也可以讓你在新服務器上線之前測試它。

或者,您可以爲新機器提供新的IP,並緩慢強制新流量流向新流量,而現有連接將保留在舊流量上。這需要某種設備(路由器,內容交換機等)來管理。不知道你的服務器是否在這樣的設備後面。

但回到你的問題,是的,你可以手動設置機器的關鍵。這在machine.config中。從你的舊機器拿這個部分,並複製過來:

<machineKey 
validationKey="..."   
decryptionKey="..." 
... 
/> 

它通常設在這裏: C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ CONFIG \ machine.config中

這裏是一篇關於使用same machine Key的文章。

+0

感謝你 - 這對我來說,設置關鍵現在只會讓我擔心的問題更快發生。也就是說,遷移將會很順利,但現有服務器上的請求會失敗。 – n8wrl 2009-08-20 18:06:22

2

您可以明確地設置machineKey,事實上,當您在Web場中使用不同的會話狀態模型時,通常會執行此操作。 Here's a link關於如何操作(靠近文章底部)。

不幸的是,如果您尚未手動生成當前machineKey,那麼每次應用程序域重新啓動時都會隨機生成(這意味着如果您的服務器已經打開,您現在容易受到驗證問題的影響)。

但是,你會發現目前的machineKey正在使用由

HKU \ SID \軟件\微軟\ ASP.NET \ 2.0.50727尋找在註冊表中。0

(如果您使用的是IIS6)。如果你小心,你可以用相同的密鑰設置新的盒子,遷移過來,沒有任何問題。但這些都是最後的名言;)