1. 程式人生 > >徹底解決IIS 500內部伺服器錯誤

徹底解決IIS 500內部伺服器錯誤

IIS500錯誤,是因為微軟的一個BUG所造成的。下面是解決辦法:

主要是由於IWAM賬號(在我的計算機即是IWAM_MYSERVER賬號)的密碼錯誤造成了HTTP 500內部錯誤。在詳細分析HTTP500內部錯誤產生的原因之前,先對IWAM賬號進行一下簡要的介紹:IWAM賬號是安裝IIS5時系統自動建立的一個內建賬號,主要用於啟動程序之外的應用程式的Internet資訊服務。IWAM賬號的名字會根據每臺計算機NETBIOS名字的不同而有所不同,通用的格式是IWAM_MACHINE,即由“IWAM”字首、連線線“_”加上計算機的NETBIOS名字組成。我的計算機的NETBIOS名字是MYSERVER,因此我的計算機上

IWAM賬號的名字就是IWAM_MYSERVER,這一點與IIS匿名賬號ISUR_MACHINE的命名方式非常相似。

IWAM
賬號建立後被Active DirectoryIIS metabase資料庫和COM+應用程式三方共同使用,賬號密碼被三方分別儲存,並由作業系統負責這三方儲存的IWAM密碼的同步工作。按常理說,由作業系統負責的工作我們大可放心,不必擔心出錯,但不知是BUG還是其它什麼原因,系統的對IWAM賬號的密碼同步工作有時會失敗,使三方IWAM賬號所用密碼不統一。當IISCOM+應用程式使用錯誤IWAM的密碼登入系統,啟動IIS Out-Of-Process Pooled Applications
時,系統會因密碼錯誤而拒絕這一請求,導致IIS Out-Of-Process Pooled Applications啟動失敗,也就是我們在ID10004錯誤事件中看到的不能執行伺服器{3D14228D-FBE1-11D0-995D-00C04FD919C1} ”(這裡{3D14228D-FBE1-11D0-995D-00C04FD919C1} IIS Out-Of-Process Pooled ApplicationsKEY),不能轉入IIS5應用程式,HTTP 500內部錯誤就這樣產生了。解決辦法手工同步賬號知道了導致HTTP 500內部錯誤的原因,解決起來就比較簡單了,那就是人工同步IWAM賬號在Active Directory
IIS metabase資料庫和COM+應用程式中的密碼。具體操作分三步,均需要以管理員身份登入計算機以提供足夠的操作許可權(IWAM賬號以IWAM_MYSERVER為例)。(一)更改Active DirectoryIWAM_MYSERVER賬號的密碼IWAM賬號的密碼由系統控制,隨機產生,我們並不知道是什麼,為完成下面兩步的密碼同步工作,我們必須將IWAM賬號的密碼設定為一個我們知道的值。

1
、選擇開始”->“程式”->“管理工具”->"Active Directory使用者和計算機",啟動“Active Directory使用者和計算機管理單元。

2
、單擊“user”,選中右面的“IWAM_MYSERVER”,右擊選擇重設密碼(T)...”,在跳出的重設密碼對方框中給IWAM_MYSERVER設定新的密碼,這兒我們設定成“Aboutnt2001”(沒有引號的),確定,等待密碼修改成功。(二)同步IIS metabaseIWAM_MYSERVER賬號的密碼可能因為這項改動太敏感和重要,微軟並沒有為我們修改IIS metabaseIWAM_MYSERVER賬號密碼提供一個顯式的使用者介面,只隨IIS5提供了一個管理指令碼adsutil.vbs,這個指令碼位於C://inetpub//adminscripts子目錄下(位置可能會因你安裝IIS5時設定的不同而有所變動)。

adsutil.vbs
指令碼功能強大,引數非常多且用法複雜,這裡只提供使用這個指令碼修改IWAM_MYSERVER賬號密碼的方法:

adsutil SET w3svc/WAMUserPass Password

"Password"
引數就是要設定的IWAM賬號的新的密碼。因此我們將IIS metabaseIWAM_MYSERVER賬號的密碼修改為“Aboutnt2001”的命令就是:

c://Inetpub//AdminScripts>adsutil SET w3svc/WAMUserPass "Aboutnt2001"

修改成功後,系統會有如下提示:

WAMUserPass: (String) "Aboutnt2001"


(三)同步COM+應用程式所用的IWAM_MYSERVER的密碼同步COM+應用程式所用的IWAM_MYSERVER的密碼,我們有兩種方式可以選擇:一種是使用元件服務MMC管理單元,另一種是使用IWAM賬號同步指令碼synciwam.vbs


1
、使用元件服務MMC管理單元1)啟動元件服務管理單元:選擇開始”->“執行”->“MMC”,啟動管理控制檯,開啟新增/刪除管理單元對話方塊,元件服務管理單元新增上。2)找到元件服務”->“計算機”->“我的電腦”->“COM+應用程式”->“Out-Of-Process Pooled Applications”,右擊“Out-Of-Process Pooled Applications”->“屬性3)切換到“Out-Of-Process Pooled Applications”屬性對話方塊的標誌選項卡。此應用程式在下列賬戶下執行選擇中此使用者會被選中,使用者名稱是“IWAM_MYSERVER”。這些都是預設的,不必改動。在下面的密碼確認密碼文字框內輸入正確的密碼“Aboutnt2001”,確定退出。4)系統如果提示應用程式被一個以上的外部產品建立。你確定要被這些產品支援嗎?時確定即可。5)如果我們在IIS中將其它一些Web應用程式保護設定為高(獨立的)”,那麼這個WEB所使用的COM+應用程式的IWAM賬號密碼也需要同步。重複(1-4)步,同步其它相應Out of process applicationIWAM賬號密碼。

COM+沒有Out-Of-Process Pooled Applications或者沒有三個 IIS COM+ 應用程式

1、開啟命令提示視窗,然後使用以下命令切換目錄:
cd %windir%/system32/inetsrv

2、執行以下命令:
rundll32 wamreg.dll, CreateIISPackage
(注意:必須準確鍵入"CreateIISPackage";它區分大小寫)
regsvr32 asptxn.dll

3、關閉並重新開啟"元件服務"。您應看到已經重新建立的所有這三個 IIS COM+ 應用程式。

4、從命令列執行 IISRESET,並對先前未正確載入的任意 ASP 頁進行測試

新的錯誤提示如下

asptxn.dll中的dllregisterserver失敗。返回程式碼是:0x8004e00f
據說是有個msdtc的服務沒有安裝。
只好先安裝了,按照再繼續重複2操作。結果成功解決問題!

4、成功解決問題的辦法總結所做的:msdtc -install
msdtc -resetlog
cd %windir%/system32/inetsrv
rundll32 wamreg.dll, CreateIISPackage
regsvr32
asptxn.dll
大功告成