2009-09-29 48 views
12

我們在QA實驗室中看到了一種奇怪的模式。我們有兩個ASP.NET應用程序,每個都部署在相同的Windows 2008 SP2 +框中。我們的應用程序池在域帳戶中運行,並且設置爲永不重新循環。兩個應用程序使用相同的1個應用程序池。ASP.NET應用程序轉到500.21 ...直到IIS重置+清空Tempoary ASP.NET緩存

經過幾個小時的運行良好後,新用戶在我們的應用程序中瀏覽頁面時,出現IIS7錯誤頁面,並出現500.21錯誤。

如果我們什麼也不做,但:

1)IISRESET 2)更改文件夾複製到C:\ WINDOWS \ Microsoft.NET \ Framework64 \ V2.0.50727 \臨時ASP.NET文件和 「RD」 2個應用。

然後衝浪到我們的網絡應用程序,一切都很好。

然後幾個小時後,然而,500.21錯誤返回。

讓我覺得奇怪的是清除「Temporary ASP.NET Files」文件夾和問題消失之間的看似關係。在安裝我們的應用程序的新版本時,我有一種清除「Temporary ASP.NET Files」文件夾的做法,但不是這樣。

這種關係是否對任何人都熟悉?這裏有一些新的IIS7功能嗎?

文本錯誤的:

中的服務器錯誤應用程序 「默認Web站點/國家報」
Internet信息服務7.0
錯誤摘要
HTTP錯誤500.21 - 內部服務器錯誤
處理程序 「PageHandlerFactory集成」在其模塊列表中有一個錯誤的模塊「ManagedPipelineHandler」
詳細的錯誤信息
模塊IIS網絡核心
通知ExecuteRequ estHandler
處理器PageHandlerFactory集成
錯誤代碼0x8007000d
請求的URL http://localhost:80/PAIS/Admin.aspx

物理路徑C:\ 0_Georgia \ GA_IS_100142 \ PortfolioArchiveImageServer \ Admin.aspx
登錄方法匿名
登錄用戶匿名
最可能的原因:
•ASP.NET未安裝或未完全安裝。
•發生配置印刷錯誤。
•存在不利的前置條件評估。
您可以嘗試的事情:
•如果ManagedPipelineHandler缺失,請確保:
o ManagedEngine位於。
o ManagedPipelineHandler處於正確的前提條件下。
•安裝ASP.NET。
•確保所有system.webServer/[email protected]位於system.webServer/[email protected]中。
•查看和部分中的前提條件。
鏈接和更多信息IIS核心無法識別該模塊。
查看更多信息»

由於提前,

霍華德·霍夫曼

+1

你能後的錯誤頁面的全文? – David 2009-09-29 22:18:40

+0

另外,我會將每個應用程序分成它自己的AppPool,以查看是否可以縮小問題範圍。 – David 2009-09-29 22:19:35

+0

請注意,我們接受了David的建議並分成了兩個池。 我也可以添加重新循環的應用程序池,*而不是運行IISReset +刪除臨時ASP.NET文件GAGI文件夾,似乎也糾正了這個問題。 問題仍然是......爲什麼? – 2009-09-30 17:18:32

回答

9

在MS ASP.NET支持的幫助下,我們發現了實際的問題。它非常微妙。我認爲MS已經表示他們將在App Fabric版本(現在是RTM)的後續版本中解決該問題。手指交叉。

在此場景中始終出現此問題:

1)ASP.NET Web應用程序尚未運行。它包括WCF Net.Pipe和/或Net.Tcp綁定。我認爲NetMsmq會發生同樣的情況,但沒有嘗試。

2)入站NetPipe或NetTcp WCF Windows激活服務請求是啓動App Domain的初始請求。

3)應用程序使用的 '集成' IIS應用程序池(IIS7或IIS 7.5)

4)的應用程序,第一請求期間使用HttpServerUtility.Execute。

事實證明,我們的應用程序在第一次WCF操作期間觸發了ASP.NET Health Monitoring事件 - 這是導致Windows激活服務(WAS)啓動我們的應用程序的操作。我們的健康監測配置包括TemplatedMailWebEventProvider。

我們的應用程序使用「集成」IIS應用程序池。

TemplatedMailWebEventProvider被實現爲以HTML形式創建電子郵件消息主體。它使用System.Web.HttpServerUtility.Execute(string, TextWriter, Boolean)過載。

對於此重載執行錯誤操作的用例,它會初始化一個基於「經典」IIS應用程序池的HTTP管道。由於這是「集成」IIS應用程序池的錯誤管道,因此下一個HTTP請求會損壞管道 - 這實際上是第一個入站HTTP請求。

因此,您將獲得所有未來HTTP請求的500.21錯誤,直到應用程序重新循環。您不需要執行IISRESET的相對激烈的步驟,清除Temporary ASP.NET緩存以清除錯誤 - 只需通過保存web.config重新啓動應用程序,並避免導致錯誤的特定啓動路徑。

MS向我們建議了一種解決方法 - 使用SimpleMailWebEventProvider而不是TemplatedMailWebEventProvider。這確實有效,因爲它將HttpServerUtility.Execute從第一個請求的代碼路徑中取出。

我建議MS引入一個新的網絡。配置<system.web>布爾設置 - UseIntegrated - 讓我們的應用程序指定要初始化的應用程序池的類型。很顯然,IIS不會將App Pool類型轉發到ASP.NET,所以我的建議是

TemplatedMailWebEvent提供程序比SimpleMailWebEventProvider更方便用戶,我們希望MS解決這個問題。

感謝所有的閱讀,

霍華德·霍夫曼

+0

我必須+1 Umair艾哈邁德的答案,因爲它解決了我的問題... – enguerran 2012-01-20 11:04:58

+0

我注意到AFAIK微軟從來沒有解決的根本原因。他們從ASP.NET Health Monitoring遷移出來,轉而投資於System Center及相關技術。問題仍然存在於Windows Server 2012中 - 尚未檢查Windows Server 2016 - 並且解決方法仍然有效。 – 2017-02-27 14:27:23

-1

的問題更可能是在應用程序代碼。 Temporary ASP.NET Files文件夾包含應用程序的預編譯副本,每次訪問應用程序文件時都會刷新它。您可以使用\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \文件夾中的aspnet_compiler.exe預編譯這些文件。使用-errorstack選項可以生成關於您正在獲取的錯誤的更多信息。長時間運行的應用程序如果使用大量內存或在inproc會話狀態下保留大量數據,將會遇到問題。如果您的會話包含大量信息,請考慮使用基於sqlserver的會話管理器。

+0

我們確實確定問題是'System.Web.HttpServerUtility.Execute(string,TextWriter,Boolean)'重載 - 真的。由於在調用過載時沒有HTTP管道,所以確實會破壞運行時。這是一個微軟問題。他們證實了它。我希望他們也能解決它......但SimpleMailWebEventProvider是一個解決方法。 – 2012-01-25 16:24:02

19

面對同樣的問題,該修補程序很簡單。

1)打開visual studio 2010命令提示符。

2)執行命令aspnet_regiis.exe -i

+0

你可以添加一個「aspnet_regiis.exe -i」的解釋嗎? – enguerran 2012-01-20 11:05:43

+1

它在IIS上安裝ASP.NET。我有這個問題,因爲.NET 4在IIS之前安裝在我的機器上。我不得不運行這個命令讓ASP.NET在我的機器上運行。 – 2012-06-08 23:00:18

+0

謝謝。它解決了我的問題。 – 2014-04-04 15:24:30

0

1. IIS 7拋出異常如下面
enter image description here

2.在管理員模式下打開Visual Studio 2010命令提示和執行aspnet_regiis.exe -i
enter image description here

3.問題固定,如下面的ASP.Net應用程序和ASP.Net MCV應用正在平穩運行。
enter image description here

+0

清楚記錄您的解決方案的好工作。確實有很多方法可以解決'500.19'錯誤。您的解決方案不是解決我們特定問題的方法。我們的特殊問題只能通過接受答案的步驟來解決。 – 2017-02-27 14:25:15

相關問題