問題背景IIS可以瀏覽htm頁面,但不能瀏覽asp頁面。確信按照常規操作,權限設置正確,已設允許腳本運行,asp程序無錯誤(沒有asp腳本,只是把htm改為asp)。瀏覽asp時,提示“HTTP   500   -   內部服務器錯誤”

解決方案

IIS5   HTTP500內部錯誤解決辦法:

先啟動MSDTC服務,什么是MSDTC服務?顯示名稱:Distributed Transaction Coordinator;描述:協調跨多個數據庫、消息隊列、文件系統等資源管理器的事務。如果停止此服務,則不會發生這些事務。如果禁用此服務,顯式依賴此服務的其他服務將無法啟動。

CMDnet start msdtc

結果顯示“distributed transaction coordinator 服務不能啟動。

解決方法:

 C:"WINDOWS"system32"dtclog 這個目錄重命名(如果有的話,沒有就直接省去這一步),然后重新建立該目錄。

在命令行下: msdtc -resetlog

net start msdtc,顯示服務啟動成功了。

然后右鍵我的電腦--管理--本地用戶和組,給IUSR_機器名和IWAM_機器名兩個用戶設置密碼,要一樣。

接著開始--運行--cmd,

然后cd C:"Inetpub"AdminScripts,

然后cscript.exe adsutil.vbs set w3svc/wamuserpass 你設置的密碼,

然后cscript.exe adsutil.vbs set w3svc/anonymoususerpass 你設置的密碼。

看一下,行了沒有?如果還不行,那么

cscript.exe synciwam.vbs -v,

然后iisreset

到一步還是不行,最后在CMD下執行以下命令:

cd %windir%"system32"inetsrv

rundll32 wamreg.dll, CreateIISPackage

regsvr32 asptxn.dll

關閉所有的IE窗口后重新打開再執行,OK,此時IIS可以瀏覽ASP頁面了!

上面的方法是轉自一個牛人的解決方案,如果還有疑惑,可以參考一下下面的文字,該段文字主要分析了IIS服務器內部錯誤的主要原因及其解決方案,不過其提供的解決方案不如上面的這個方案來的方便和徹底。

.錯誤表現

IIS5HTTP   500內部服務器錯誤是我們經常碰到的錯誤之一,它的主要錯誤表現就是ASP程序不能瀏覽但HTM靜態網頁不受影響。另外當錯誤發生時,系統事件日志和安全事件日志都會有相應的記錄。

具體如下:

()IE中的表現

當瀏覽以前能夠正常運行的asp頁面時會出現如下的錯誤:

網頁無法顯示

您要訪問的網頁存在問題,因此無法顯示。

請嘗試下列操作:

打開   http://127.0.0.1   主頁,尋找指向所需信息的鏈接。

單擊刷新按鈕,或者以后重試。

HTTP   500   -   內部服務器錯誤

Internet   信息服務

技術信息(支持個人)

詳細信息:

Microsoft   支持

或者是:

Server   Application   Error

The   server   has   encountered   an   error   while   loading   an   application   during   the   processing   of   your   request.   Please   refer   to   the   event   log   for   more   detail   information.   Please   contact   the   server   administrator   for   assistance.

()安全日志記錄(2)

事件類型:   失敗審核

事件來源:   Security

事件種類:   登錄/注銷

事件   ID:   529

日期:   2001-9-9

事件:   11:17:07

用戶:   NT   AUTHORITY"SYSTEM

計算機:   MYSERVER

描述:

登錄失敗:

原因:   用戶名未知或密碼錯誤

用戶名:   IWAM_MYSERVER

:   MYDOM

登錄類型:   4

登錄過程:   Advapi

身份驗證程序包:   MICROSOFT_AUTHENTICATION_PACKAGE_V1_0

工作站名:   MYSERVER

事件類型:   失敗審核

事件來源:   Security

事件種類:   帳戶登錄

事件   ID:   681

日期:   2001-9-9

事件:   11:17:07

用戶:   NT   AUTHORITY"SYSTEM

計算機:   MYSERVER

描述:

登錄到帳戶:   IWAM_MYSERVER

登錄的用戶:   MICROSOFT_AUTHENTICATION_PACKAGE_V1_0

從工作站:   MYSERVER

未成功。錯誤代碼是:   3221225578

()系統日志中的記錄(2)

事件類型:   錯誤

事件來源:   DCOM

事件種類:  

事件   ID:   10004

日期:   2001-9-9

事件:   11:20:26

用戶:   N/A

計算機:   MYSERVER

描述:

DCOM   遇到錯誤“無法更新密碼。提供給新密碼的值包含密碼中不允許的值。  ”并且無法登錄到   ."IWAM_MYSERVER   上以運行服務器:

{3D14228D-FBE1-11D0-995D-00C04FD919C1}

事件類型:   警告

事件來源:   W3SVC

事件種類:  

事件   ID:   36

日期:   2001-9-9

事件:   11:20:26

用戶:   N/A

計算機:   MYSERVER

描述:

服務器未能轉入應用程序   '/LM/W3SVC/4/Root'。錯誤是   'RunAs   的格式必須是<域名>"<用戶名>或只是<用戶名>'。

  

.原因分析

綜合分析上面的錯誤表現我們可以看出,主要是由于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   Directory、IIS   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   DirectoryIIS   metabase數據庫和COM+應用程序中的密碼。

具體操作分三步,均需要以管理員身份登錄計算機以提供足夠的操作權限(IWAM賬號以IWAM_MYSERVER為例)。

(一)更改Active   DirectoryIWAM_MYSERVER賬號的密碼

IWAM賬號的密碼由系統控制,隨機產生,我們并不知道是什么,為完成下面兩步的密碼同步工作,我們必須將IWAM賬號的密碼設置為一個我們知道的值。

1、選擇開始”->“程序”->“管理工具”->"Active   Directory用戶和計算機"(如果在管理工具中找不到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賬號密碼。

2、使用IWAM賬號同步腳本synciwam.vbs

實際上微軟已經發現IWAM賬號在密碼同步方面存在問題,因此在IIS5的管理腳本中單獨為IWAM賬號密碼同步編寫了一個腳本synciwam.vbs,這個腳本位于C:"inetpub"adminscripts子目錄下(位置可能會因你安裝IIS5時設置的不同而有所變動)。

synciwam.vbs腳本用法比較簡單:

cscript   synciwam.vbs   [-v|-h]

“-v”參數表示詳細顯示腳本執行的整個過程(建議使用),“-h”參數用于顯示簡單的幫助信息。

我們要同步IWAM_MYSERVER賬號在COM+應用程序中的密碼,只需要執行“cscript   synciwam.vbs   -v”即可,如下:

cscript   c:"inetpub"adminscripts"synciwam.vbs   -v

Microsoft   (R)   Windows   Script   Host   Version   5.6

版權所有(C)   Microsoft   Corporation   1996-2000。保留所有權利。

WamUserName:IWAM_MYSERVER

WamUserPass:Aboutnt2001

IIS   Applications   Defined:

Name,   AppIsolated,   Package   ID

w3svc,   0,   {3D14228C-FBE1-11d0-995D-00C04FD919C1}

Root,   2,

IISHelp,   2,

IISAdmin,   2,

IISSamples,   2,

MSADC,   2,

ROOT,   2,

IISAdmin,   2,

IISHelp,   2,

Root,   2,

Root,   2,

Out   of   process   applications   defined:

Count:   1

{3D14228D-FBE1-11d0-995D-00C04FD919C1}

Updating   Applications:

Name:   IIS   Out-Of-Process   Pooled   Applications   Key:   {3D14228D-FBE1-11D0-995D-00C04FD919C1}

從上面腳本的執行情況可以看出,使用synciwam.vbs腳本要比使用組件服務的方法更全面和快捷。它首先從IISmetabase數據庫找到IWAM賬號"IWAM_MYSERVER"并取出對應的密碼“Aboutnt2001”,然后查找所有已定義的IIS   ApplicationsOut   of   process   applications,并逐一同步每一個Out   of   process   applications應用程序的IWAM賬號密碼。

使用synciwam.vbs腳本時,要注意一個問題,那就是在你運行synciwam.vbs之前,必須保證IIS   metabase數據庫與Active   Directory中的IWAM密碼已經一致。因為synciwam.vbs腳本是從IIS   metabase數據庫而不是從Active   Directory取得IWAM賬號的密碼,如果IIS   metabase中的密碼不正確,那synciwam.vbs取得的密碼也會不正確,同步操作執行到“Updating   Applications”系統就會報80110414錯誤,即找不到應用程序{3D14228D-FBE1-11D0-995D-00C04FD919C1}”。

好了,到現在為止,IWAM賬號在Active   Directory、IIS   metabase數據庫和COM+應用程序三處的密碼已經同步成功,你的ASP程序又可以運行了