1

私のcreate.aspページには次の方法があります。

Public Function read(url)

    Set xmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
    Set xml = Server.CreateObject("Microsoft.XMLDOM")

    xmlHttp.Open "GET", url, False, PROXY_USERNAME, PROXY_PASSWORD
    xmlHttp.SetProxy 2, PROXY
    xmlHttp.SetTimeouts 0, 0, 0, 0
    xmlHttp.Send


    xml.Async = False
    xml.SetProperty "ServerHTTPRequest", True
    xml.ValidateOnParse = True

    xml.Load xmlHttp.ResponseXml

    Set read = xml

    Set xmlHttp = Nothing
    Set xml = Nothing
End Function

この関数は10回のうち9回動作します。

問題:まれに、タイムアウトエラーが発生します。このため、私はxmlHttp.Timeouts無限大に設定しました。ステートメントを使用してみOn errorましたが、問題は解決しません。

質問:*何らかのエラーが発生した場合、関数を最初から実行するにはどうすればよいですか?*私が遭遇した唯一のエラーは、実行しようとしたときのタイムアウトエラーxmlHttp.Sendです。

他の可能な解決策もありがたいです。

4

1 に答える 1

2

コードの問題ではなく、プロキシサーバーの問題である可能性があります。

再試行できるようにしたい場合は、次のことができます。

dim result
for i = 1 to 3 '//3 attempts
    set result = read("http://bla.bla")
    if (not result is nothing) then exit for
next

if (result is nothing) then
    '//repeatedly failed ...
else
    '//got a dom doc
end if

Public Function read(url)
    Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    Set xml = CreateObject("Microsoft.XMLDOM")

    on error resume next

    xmlHttp.Open "GET", url, False
    xmlHttp.Send
    xml.Async = False
    xml.SetProperty "ServerHTTPRequest", True
    xml.ValidateOnParse = True
    xml.Load xmlHttp.ResponseXml

    if (err.number = 0) then
        set read = xml
     else
        set read = nothing
     end if

    on error goto 0
    Set xmlHttp = Nothing
    Set xml = Nothing
End Function
于 2011-09-16T13:46:47.547 に答える