一個(gè)asp后臺(tái)使用了XMLHTTP組件的頁面無法無法生成靜態(tài)頁面了,運(yùn)行時(shí)提示"msxml3.dll 錯(cuò)誤 '800c0019′" 系統(tǒng)錯(cuò)誤:-2146697191 請(qǐng)查找行 數(shù)。之前一直以為是服務(wù)器配置或數(shù)據(jù)庫的原因,或者IE瀏覽器有問題,因?yàn)檫@是一個(gè)XMLHTTP對(duì)象組件,可能我們前幾天更新了系統(tǒng)補(bǔ)丁升級(jí)了xmlhttp導(dǎo)致?,F(xiàn)在終于找到了解決方案、摸清了原因。
解決方法:
1、找到錯(cuò)誤行,返回文件中實(shí)例化對(duì)象代碼
set objXmlHttp = Server.CreateObject("Microsoft.XMLHTTP")
2、一般在msxml2.6以下版本使用
set objXmlHttp = Server.CreateObject("MSXML2.XMLHTTP")
3、msxml3.dll+版本支持使用如下代碼
Set http=Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")
最后,建議使用第三步驟中的代碼。
下面是其他網(wǎng)友的補(bǔ)充
msxml3.dll 錯(cuò)誤 '800c0008',系統(tǒng)錯(cuò)誤: -2146697208的解決方案
msxml3.dll 錯(cuò)誤 '800c0005'
The system cannot locate the resource specified.
/plugins.asp??А 165
這個(gè)情況一般出現(xiàn)在采集信息或用XMLHTTP靜態(tài)更新網(wǎng)頁的時(shí)候會(huì)出現(xiàn)這個(gè)問題,以前出現(xiàn)類似的錯(cuò)誤我都是用
set objXmlHttp = Server.CreateObject("Microsoft.XMLHTTP") '一般在msxml2.6以下版本使用
' set objXmlHttp = Server.CreateObject("MSXML2.XMLHTTP") '受msxml3.dll+支持
替換著使用,現(xiàn)在卻怎么都報(bào)錯(cuò)。
搜索了網(wǎng)上我所知道所有的技術(shù)論壇和搜索引擎,引起這樣的問題可能存在多種情況,下面總結(jié)一下:
(一)那就是最基本的了,你的服務(wù)器不支持xmlhttp或組件版本態(tài)低,需要下載相應(yīng)的組件。這個(gè)一般服務(wù)器都不需要的,大多數(shù)情況下都支持xmlhttp,所以這個(gè)情況較少。
(二)msxml3.dll文件可能損壞或該文件使用權(quán)限不夠(權(quán)限這個(gè)情況可能性較小),如果是文件損壞的話,你可以到網(wǎng)上下載相應(yīng)系統(tǒng)環(huán)境的msxml3.dll文件替換下(2003系統(tǒng)好像在c:\\windows\system32下),需要關(guān)閉相應(yīng)的服務(wù)例如iis等才能覆蓋。
(三)防火強(qiáng)或殺毒軟件禁用了相應(yīng)的端口,具體該怎么設(shè)置要根據(jù)不同的軟件而定,你可以試著關(guān)閉防火墻或殺毒軟件后再測(cè)試確定是否是這個(gè)問題。
(四)重新注冊(cè)下該組件試試看。開始>>運(yùn)行: regsvr32 msxml3.dll
(五)DNS解析錯(cuò)誤,檢查你的網(wǎng)絡(luò)設(shè)置或正確的域名解析訪問
(六)檢查你的IP篩選的設(shè)置(這個(gè)不是太了解)
(七)對(duì)方資源失效,比如采集某條信息時(shí),對(duì)方該條信息不存在導(dǎo)致程序終止錯(cuò)誤,也可能是這種情況。這種錯(cuò)誤都是出現(xiàn)在調(diào)用了 xmlhttp 組件的 Open方法,接著再用Send方法后造成的。當(dāng)open方法的的 url 參數(shù)無法訪問時(shí),就會(huì)造成 8000005 錯(cuò)誤。并且一旦產(chǎn)生這種錯(cuò)誤,就會(huì)導(dǎo)致應(yīng)用程序終止,無法繼續(xù)操作。大多說的程序是這樣寫的:
Function functionName(pararm ...)
Dim Http
Set Http=Server.CreateObject("MSXML2.XMLHTTP.4.0")
With Http
.open "GET",HttpUrl,False
.Send
End With
If Http.Readystate>4 then
Set Http=Nothing
......
Exit function
End if
End Function
大多數(shù)的程序都是運(yùn)用xmlhttp的 Readystate 屬性判斷從服務(wù)器的返回狀態(tài)。其實(shí)這樣未必適合,很多時(shí)候用ReadyState 屬性判斷并不能真正檢測(cè)到程序流程中的錯(cuò)誤。當(dāng)遇到錯(cuò)誤的時(shí)候,仍然會(huì)致使程序終止。其實(shí)修改一下上面的代碼,完全可以實(shí)現(xiàn)跳過程序執(zhí)行過程中遇到的錯(cuò)誤,使程序繼續(xù)運(yùn)行。修改代碼如下:
Function functionName(pararm ...)
Dim Http
Set Http=Server.CreateObject("MSXML2.XMLHTTP.4.0")
With Http
.open "GET",HttpUrl,False
.Send
End With
On Error Resume Next
If Http.Status>200 then
Set Http=Nothing
......
Exit function
End if
End Function
Send 方法產(chǎn)生錯(cuò)誤的時(shí)候,ReadyState的值或許為4,但Status的返回值就一定不是200的。呵呵,我經(jīng)過多次跟蹤ReadyState和Status的值得到以前結(jié)果??赡軙?huì)有差錯(cuò),目前我還沒有發(fā)現(xiàn)。
希望以上程序解決方案能夠幫到你!!如果朋友你有更好的解決方法,請(qǐng)一定告訴我喲。
我是以MSXML2.XMLHTTP.4.0為例說明的程序,也適合其它版本的XMLHTTP組件。想檢查的你系統(tǒng)中已經(jīng)安裝了哪些版本的XMLHTTP組件,請(qǐng)到注冊(cè)表的 HKEY_CLASSES_ROOT 下查找。
(八)進(jìn)入服務(wù)器設(shè)置您的IE安全選項(xiàng)(把等級(jí)設(shè)中或低試試看),在受信任網(wǎng)站里加入您要獲取的域名即可。
(九)以上方法我基本都看過之后也試過了,不過都沒解決。于是去微軟下載了MSXML 4.0 Service Pack 2 (Microsoft XML Core Services)和Hotfix for MSXML 4.0 Service Pack 2 - KB832414 - 簡(jiǎn)體中文(KB832414_MSXML4.0_x86.exe)安裝后,問題終于解決了?。?!
(十)如果你的情況,在我上面方法都解決不了,那就太背了,你繼續(xù)到網(wǎng)上找其它可能出現(xiàn)的情況吧,如果不想繼續(xù)找了就重裝你的iis或干脆重裝系統(tǒng)(做這個(gè)之前你可以試著重新啟動(dòng)一下系統(tǒng)看看,或許可能大概仿佛幸運(yùn)的話又可以使用了