修正: Server.Transfer 方法會造成堆疊溢位,會使 ASP。NET 工作者處理序停止回應

文章翻譯 文章翻譯
文章編號: 839521 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

徵狀

附註 Microsoft Visual c + +。NET 2002 和 Microsoft Visual c + +。NET 2003 支援這兩個 managed 程式碼模型所提供的 Microsoft。NET Framework 並不受管理的原生 Windows 程式碼模型。這份文件中的資訊僅適用於未受管理的 Visual c + + 程式碼。當您執行 web 應用程式為基礎的 Microsoft。NET Framework 1.1 中,您收到錯誤訊息,當下列情況皆成立時:
  • 您的 Web 應用程式呼叫 Server.Transfer 移轉至同一個頁面的方法。
  • 您要傳送到 POST 要求 Server.Transfer 方法。
  • 您套用知識庫文件編號 837132 或更新版本的 hotfix 中所述的 hotfix。
以下是您會收到錯誤訊息:
識別發生未處理例外狀況型別 'System.StackOverflowException'
在您收到錯誤訊息之後,ASP。NET 背景工作處理序停止回應。

發生的原因

這個問題起因於Server.Transfer (sa頁面)方法迴圈回同一個頁面,直到所有的堆疊空間已用完。Server.Transfer方法會傳回給循環相同頁面因為每個 POST 要求之間保留查詢字串。

解決方案

藉由安裝這個 service pack 處理呼叫Server.Transfer (同一個資料頁)方法不使用其他參數時,會將 「 徵狀 〉 一節中列出的問題。

附註當您呼叫Server.Transfer (同一個頁面上,則為 true)而不需額外的程式碼類似下列,就會發生堆疊溢位。這種行為是經過設計規劃,並且會出現在。Net Framework 1.1 安裝此 hotfix,並且也會發生在。Net Framework 2.0 版或是更新。當您需要的表單,並查詢資料時,請參閱 「 表格〈 其他資訊 〉 如需有關如何處理這種情況的指引的這份文件的區段。若要避免這個錯誤,加入類似下列的程式碼:

視覺 C#。NET
if (IsPostBack) 
{ 
       if (Context.Items["Transferred"] == null) 
      { 
	// Initialize to prevent stackover
	Context.Items["Transferred"] = new object(); 
	// TransferToSelf
	Server.Transfer("Webform1.aspx", true);
      } 
} 
Visual Basic。NET
<title>Webform1</title> 
If IsPostBack() Then   
     If Context.Items("Transferred") is Nothing 
           'Initialize to prevent stackover 
           Context.Items("Transferred") = new object() 
          'TransferToSelf 
          Server.Transfer("WebForm1.aspx", true)   
     End If 
End If

Hotfix 資訊

支援的 hotfix 已提供可以從 Microsoft 取得,但是其目的只為修正本文所述的問題。只套用至發生此特定問題的系統上。此 hotfix 可能會接受其他測試。因此,如果您不會嚴重受到這個問題,我們建議您等候下一步 Microsoft。NET Framework 1.1 service pack 包含此 hotfix。

若要立即解決這個問題,請連絡 Microsoft 產品支援服務 」 取得 hotfix。如需 Microsoft 產品支援服務電話號碼以及支援費用的相關資訊的完整清單,請造訪下列 Microsoft 網站:
看到
附註在特殊情況下,如果 Microsoft 支援專業人員認為某特定更新程式可以解決您的問題,可能會收取一般因支援電話所產生的費用。收取支援費用會套用到其他支援問題的特定更新程式檔案無法解決的問題。

必要條件

沒有任何先決條件是必要的。

重新啟動需求

您沒有在您套用此軟體更新之後重新啟動電腦。

其他注意事項

此 hotfix 不會取代任何其他 hotfix。

檔案資訊

檔案屬性 (或較新的檔案屬性),此 hotfix 的英文版具有下表所示。其日期和時間,這些檔案會列出在國際標準時間 (UTC)。當您檢視檔案資訊時,它會轉換為本地時間。若要查看 UTC 與當地時間的時差,請使用 時區 在 [控制台] 中的 [日期及時間] 工具中] 索引標籤。
Date         Time   Version            Size    File name
--------------------------------------------------------------
31-Mar-2004  22:45  1.1.4322.1017     258,048  Aspnet_isapi.dll  
31-Mar-2004  22:45  1.1.4322.1017      20,480  Aspnet_regiis.exe  
31-Mar-2004  22:45  1.1.4322.1017      32,768  Aspnet_state.exe  
31-Mar-2004  22:45  1.1.4322.1017      32,768  Aspnet_wp.exe    
27-May-2003  19:00                     33,522  Installpersistsqlstate.sql
27-May-2003  19:00                     34,150  Installsqlstate.sql
30-Mar-2004  23:41                     35,017  Installsqlstatetemplate.sql
18-Jan-2004  08:55  1.0.3705.0        106,496  Netfxupdate.exe  
31-Mar-2004  22:45  1.1.4322.1017      94,208  Perfcounter.dll  
18-Jan-2004  08:55  1.1.4322.573      102,400  Setregni.exe     
02-Feb-2004  16:43                      8,571  Smartnav.js
31-Mar-2004  22:44  1.1.4322.1017   1,220,608  Sy52106.dll      
31-Mar-2004  22:44  1.1.4322.1017     241,664  System.messaging.dll  
31-Mar-2004  22:44  1.1.4322.1017     323,584  System.runtime.remoting.dll  
31-Mar-2004  22:44  1.1.4322.1017     131,072  System.runtime.serialization.formatters.soap.dll  
31-Mar-2004  22:44  1.1.4322.1017   1,257,472  System.web.dll   
31-Mar-2004  22:44  1.1.4322.1017     819,200  System.web.mobile.dll  
31-Mar-2004  22:45  1.1.4322.1017     569,344  System.web.services.dll  
31-Mar-2004  22:45  1.1.4322.1017   1,339,392  System.xml.dll   
18-Jan-2004  08:55  1.1.4322.573      118,784  Togac.exe        
30-Mar-2004  23:41                      2,119  Uninstallsqlstatetemplate.sql
02-Feb-2004  16:43                     14,482  Webuivalidation.js
17-Mar-2004  09:10                        271  Branches.inf
31-Mar-2004  23:18                     17,125  Kb839521.cat
31-Mar-2004  23:07                        354  Updatebr.inf
31-Mar-2004  23:08                     11,734  Update_rtmqfe.inf

狀況說明

Microsoft 已確認這是"適用於 」 一節所列出的 Microsoft 產品中的問題。

其他相關資訊

此 hotfix 會導入一些新的行為,在Server.Transfer方法中。下表說明當您使用不同的參數來傳送透過Server.Transfer方法 POST 要求時,就會發生的結果。
摺疊此表格展開此表格
Server.Transfer 呼叫結果
Server.Transfer (不同的網頁,則為 false)查詢字串的資料會被丟棄,並被卸除表單資料的集合。
Server.Transfer (不同的網頁) 查詢字串的資料會被丟棄,並收集表單資料會保留。
Server.Transfer (不同的網頁,則為 true)將會保留查詢字串資料,並收集表單資料會保留。
Server.Transfer (同一個頁面上,則為 false) 查詢字串的資料會被丟棄,並被卸除表單資料的集合。
Server.Transfer (同一個資料頁)查詢字串的資料會被丟棄,並收集表單資料會保留。
Server.Transfer (同一個頁面上,則為 true)將會保留查詢字串資料,並收集表單資料會保留。

如果要重現問題的步驟

  1. 在所述的 hotfix 中安裝知識庫文件編號 837132,或是較新版的 hotfix。
  2. 在 Microsoft Visual Studio。NET 中,建立新的 Visual Basic ASP。NET Web 應用程式專案。
  3. 按一下 按鈕工具箱然後繪製在 WebForm1.aspx] 頁面上的按鈕。名稱的新按鈕 [Button1。
  4. 連按兩下 Button1然後加入下列程式碼, Button1_Click 事件:
    If IsPostBack() Then
        Server.Transfer("WebForm1.aspx")
    End If
    
  5. 執行方案,,然後按一下 Button1.
如需詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
編號 824684用來描述 Microsoft 軟體更新標準術語的說明
如需詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
837132修正: Web 服務物件佇列及 CPU 使用率可能會意外地在增加。NET 1.1 Framework

屬性

文章編號: 839521 - 上次校閱: 2012年4月16日 - 版次: 1.0
這篇文章中的資訊適用於:
  • Microsoft .NET Framework 1.1 Service Pack 1
關鍵字:?
kbqfe kbhotfixserver kbbug kbfix kbnetframe110presp1fix kbmt KB839521 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:839521
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com