2011年1月19日 星期三

ASP.NET 發生錯誤: 要解密的資料長度無效

緣由

最近更新客戶的網頁伺服器時,在事件檢件器中發現了下面的錯誤

Type : System.ApplicationException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : 發生錯誤: 要解密的資料長度無效。

由於該網站有建置Web Farm以符合 NLB(Network Load Balance),另外一個網頁伺服器雖然沒有看到這個錯誤,但有另一個看來詭異的錯誤

Type : System.ApplicationException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : 發生錯誤: 這是無效的 webresource 要求。
Query String: d=xA7L75UVc2mKUixrFtavoQ2&t=633722850937794608
Cookie: __utma=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
__utmz=xxxxxxxxxxxxxxxxxxxxxxxx.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
ASP.NET_SessionId=4lflv055rekkuqierw02csa1

毀了,完全看不懂!

原因

找了老半天,這是因為 MS10-070 的因素,我要求客戶上 windows update。而客戶的環境通常只開放一些 IP才可以連入,通常是維護性質的IP。並且,微軟的Windows Update 網站竟然也沒有開放!

windows update幫我們檢視哪些update 需要上,我們只需要按照指示安裝即可。沒有windows update 工具的輔助,該上的更新自然容易沒上了。

MS10-070 如果在Web Farm 的環境下,需要每個加入 Web Farm 的伺服器都要上這些 update,並且每一個都要試著上上看。如下圖,在Windows Server 2003 Service Pack 2 中,如果有安裝 .NET Framework 2.0 SP2,就需要安裝 KB2418241。如果有安裝 NET Framework 3.50 SP1,就要安裝 KB2416473。如果上述兩個.NET 版本都有安裝,則對應的兩個update都要安裝。

image

我的Case,是Web Farm 中這些伺服器安裝這些更新未上齊,而且每個伺服器上的更新還不一致,導致asp.net 的 viewstate需要 check ViewStateMAC (見EnableViewStateMAC)時,發生解密的錯誤。

解決方法

  • 使用Windows Update,將需要上的更新一次上完。這是最佳建議。
  • MS10-070 所顯示的符合Windows 版本,可能需要更的新Update 一次下載回來。每一個都裝裝看。需要的更新自然就會安裝進去,不需要的更新也不會讓我們更新(如下圖)。

image

沒有留言:

Share with Facebook