最近網(wǎng)站一個(gè)Web應(yīng)用程序運(yùn)行得不是很好,時(shí)??ㄗ?dǎo)致w3wp.exe應(yīng)用程序池CPU消耗過(guò)高,嚴(yán)重影響服務(wù)器性能,而一旦卡住,該Web應(yīng)用程序就會(huì)訪問(wèn)失敗,且不能自行恢復(fù),需要手動(dòng)重啟IIS才行,這嚴(yán)重影響了網(wǎng)站的正常運(yùn)轉(zhuǎn),因?yàn)椴豢赡苋斯r(shí)刻盯著服務(wù)器的CPU消耗,因此需要解決一下這個(gè)問(wèn)題。修改Web應(yīng)用程序不現(xiàn)實(shí),我想到的是在服務(wù)器端運(yùn)行一個(gè)VB監(jiān)控軟件,采用軟件監(jiān)控+強(qiáng)行重啟IIS的方法,這個(gè)方法實(shí)施起來(lái)比較簡(jiǎn)單。
監(jiān)控網(wǎng)站打開(kāi)狀態(tài)
vb監(jiān)控網(wǎng)站打開(kāi)狀態(tài)的方法有幾種,常用的是使用XMLHTTP來(lái)打開(kāi)網(wǎng)頁(yè),然后判斷成功與否。核心代碼如下:
Dim html As String
Dim XMLObject As Object
Set XMLObject = CreateObject("Microsoft.XMLHTTP")
XMLObject.Open "GET", "http://www.howtostagehomes.com/", False
XMLObject.send
html = XMLObject.responseText
不過(guò)上述代碼的局限性比較明顯,它不能獲得網(wǎng)頁(yè)的header(標(biāo)頭)信息,為了能更靈活的應(yīng)用監(jiān)控軟件,我使用了vb的Inet控件,下面是編程過(guò)程。
1、添加Inet控件
添加部件“Microsoft Internet Transfer Control 6.0”,
添加部件Inet
2、編寫(xiě)監(jiān)控程序
使用Inet打開(kāi)網(wǎng)頁(yè)的程序比較簡(jiǎn)單,可以通過(guò)獲得網(wǎng)頁(yè)的header信息,然后從狀態(tài)碼來(lái)判斷網(wǎng)頁(yè)打開(kāi)狀態(tài),代碼如下:
'通過(guò)Inet控件獲得網(wǎng)頁(yè)header信息
Inet1.OpenURL “http://www.howtostagehomes.com/” '用inet連接網(wǎng)頁(yè)
If InStr(1, Inet1.GetHeader, "200") > 0 Then '獲得header信息,判斷頁(yè)頭是否包含字符“200”
MsgBox "網(wǎng)頁(yè)可以打開(kāi)!"
Else
MsgBox "網(wǎng)頁(yè)不能打開(kāi)!"
End If
也可以先獲得網(wǎng)頁(yè)的html源文件,然后判斷源文件是否包含某特定的字符串,代碼如下:
'獲得網(wǎng)頁(yè)HTML代碼
Dim szHtml As String
szHtml = Inet1.OpenURL( “http://www.howtostagehomes.com/” ) '用inet連接網(wǎng)頁(yè)
If InStr(1,szHtml,"卡卡測(cè)速網(wǎng)") > 0 Then '判斷網(wǎng)頁(yè)是否包含某特定字符串
MsgBox "網(wǎng)頁(yè)可以打開(kāi)!"
Else
MsgBox "網(wǎng)頁(yè)不能打開(kāi)!"
End If
使用vb Inet控件編寫(xiě)監(jiān)控網(wǎng)頁(yè)打開(kāi)狀態(tài)的核心代碼就是這樣了。
本文旨在介紹vb Inet控件的使用,我們可以在此基礎(chǔ)上編寫(xiě)其他的行為,例如可以遇到網(wǎng)頁(yè)打不開(kāi)時(shí)重啟服務(wù)器。
需要注意的是,使用vb Inet控件編寫(xiě)的監(jiān)控軟件,在服務(wù)器上運(yùn)行時(shí),要先下載MSINET.OCX這個(gè)文件,放到C:\WINDOWS\system32文件夾下,否則運(yùn)行會(huì)出錯(cuò)。