2013-04-08 21 views
3

我認爲我已經嘗試了所有針對此問題的標準回答,並且我知道我已經閱讀了數百個關於此問題的問題和帖子,但沒有他們似乎已經解決了這個問題,或者說明了我的情況下的原因。 (我5小時下來,沒有接近:-()視圖狀態驗證在網絡農場中失敗 - 常見嫌疑人被淘汰

  • 我有2個服務器網絡農場。

  • 我已經設置machine.config中機鍵和確認鍵兩臺機器

  • 加密:SHA1,解密:AES - 這是默認設置,它可以幫助改變他們

  • 我已經驗證,在鏈中沒有任何其他配置文件(web.cfg,APPHOST等)有一個這些值的設置。

  • 我添加了一個頁面到吐機器鍵值背出現場(based on this SO),並證實它們是相同的跨越請求機器和匹配是機器的.config

  • 服務器端會話狀態位於共享狀態服務器中,我已驗證sessionid對2個服務器的請求之間保持不變。

  • 我已驗證頁面已完全加載,__EVENTVALIDATION隱藏字段在啓動帖子之前已呈現到頁面中。該視圖狀態的大小是不是太糟糕,在7.64kb

當頁面從請求呈現給服務器1,然後回傳到服務器2,我得到的可怕...

Error Message: 

Unable to validate data. 
at System.Web.Configuration.MachineKeySection.GetDecodedData(Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Int32& dataLength) 
at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) HttpApplication.RecordError => HttpApplication.RaiseOnError => global_asax.Application_Error 

這篇文章是由一個標準的,純粹的asp鏈接按鈕觸發的,頁面上沒有ajax。

任何和所有的幫助將不勝感激。

設置enableViewStateMAC =虛假不:-)

回答

2

繼承了配置狀態下的服務器,我從來沒有質疑密鑰的有效性! ...只是檢查,他們在兩臺服務器上匹配...

他們離開所有的加密/解密和驗證算法設置,我用this tool具有比其他人更多的選項生成新的密鑰。

問題解決

這個故事的寓意:如果有疑問,生成新的密鑰

...但爲什麼和怎麼樣?一些帶有視圖狀態的回發功能在舊密鑰的使用情況良好,只有當回傳到不同的服務器時,問題纔會明顯。如果鑰匙無效 - 丟失一個字符或東西 - 然後回發應該失敗 - 我認爲

1

一個解決方案,如果你建立了機器鍵是在兩個箱子一樣,難道是加密/解密它們?

您是否嘗試過使用Triple DES並在兩臺服務器上的machine.config中設置decryptionKey?

Check here

1

而且確保MachineKeys的是相同的一個簡單的方法是在web.config中添加這樣一行。

注:假設你有兩臺服務器上相同的web.config文件,並確保該的validationKey和decryptionKey有效

您可以使用http://aspnetresources.com/tools/machineKey生成它。

<system.web> 
    <machineKey validationKey="*D9B0EDEA69D81A89BF5FBA2B08BAF691013F86B89A1F6BA8068C6ECC9539074" decryptionKey="*AE2B1966AF65D08F03EDFB" validation="SHA1" decryption="AES" />