2008-12-05 65 views
3

我們的網站有一個半奇怪的問題。當客戶端通過多個IP的請求連接時ViewState解碼失敗

一致地,從1個匿名用戶*發生以下錯誤:

異常類型信息:System.FormatException

異常消息:用於 一個基地-64字符數組無效長度。

經過調查,它出現在用戶正在使用某種形式的負載平衡的防火牆,作爲IIS日誌示出了從2種不同的(但連續的)IP的發起請求。

從我可以確定,禁用'ViewStateMAC'應該可以解決這個問題。

我不確定,也沒有任何方式與用戶一起測試,我覺得有點不願意繼續。

有沒有人遇到類似的問題?你是怎麼處理它們的?

服務器的詳細信息:

單個服務器(Win2003的)從一個單一的IP上運行。

更新:

從我可以判斷,ViewStateMAC僅用於服務器端。我的問題是由於客戶回傳一個包含多個IP的單頁。

*但是從IIS日誌中確定的相同2個IP。用戶也不是惡意的。

+0

你有沒有找到解決方案? – JohannesH 2010-06-10 08:50:46

+0

@JohannesH:沒有,也沒有必要,在18個月前從這個項目中解脫出來。 – leppie 2010-06-10 09:11:29

回答

1

禁用viewstatemac不會解決問題; ViewStateMac故障發生在有多個Web服務器時,而不是,當用戶來自多個IP地址時。

您是否正在使用viewstateuserkey?即使如此,這是一個很長的一步,因爲你會得到一個不同的例外。

如果用戶可以在一致的基礎上重新創建它,讓他們安裝fiddler和記錄請求直到它發生,然後讓他們將它們發送給您,我會受到誘惑。然後從你身邊重播它們,看看是否發生錯誤。

他們沒有在Mac上使用IE瀏覽器是他們?由於表單字段長度的錯誤,這會破壞長視圖狀態。

3

嗨 - 我們發現在一個應用程序上出現異常數量的這些錯誤 - 由於客戶需求和缺乏這些指導 - 使用過多的控件,特別是每頁上的GridViews。

明顯的罪魁禍首是viewstate的長度,在某些極端情況下是+ 5萬字符長。由於這是一個僅由有限用戶使用的管理應用程序,因此我們最初通過將視圖狀態移動到會話中來解決這個問題,使用此優秀(稍微過時的)文章中概述的解決方案的修改版本: http://msdn.microsoft.com/en-us/magazine/cc163577.aspx 但是,這給了我們使用後退按鈕和/或標籤式瀏覽的問題。

接下來,我們添加了一些額外的日誌記錄代碼 - 並確認問題確實只是錯誤所說 - base-64編碼的字符串必須具有可被4除的長度 - 並且當我們得到這個從未案子。 這個假設是,有些代理和/或防火牆我們只是在某些時候切斷視圖狀態字符串。 然後,我們使用ASP.NET的ViewStateChunking將字段分割成幾個隱藏字段 - 我們仍在監視此解決方案。

但是 - 我最近得到了有一個有效長度的viewstate字段的錯誤 - 但是__EVENTVALIDATION字段長度在這個上是無效的。

在發生這種情況的頁面上,我們的字段中帶有「+」號(電話號碼) - 我目前正在調查是否所有這些都可能是由原始字符串的無效編碼引起的(因爲+符號有在base-64 endoded字符串中的特殊含義)。

相關問題