Выполнить функцию от запуска при ошибке / тайм-ауте через Vb Script в классическом ASP - PullRequest
1 голос
/ 16 сентября 2011

У меня есть следующий метод на моей 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

Функция работает 9 раз из 10.

Проблема: в редких случаях выдает ошибку тайм-аута. По этой причине я установил xmlHttp.Timeouts в бесконечность. Я также пытался использовать операторы On error, но это не решает проблему.

Вопрос: * Как мне выполнить функцию с самого начала, если она дает мне какую-либо ошибку? * Единственная ошибка, с которой я столкнулся, это ошибка тайм-аута при попытке выполнить xmlHttp.Send.

Любое другое возможное решение также приветствуется.

1 Ответ

2 голосов
/ 16 сентября 2011

Вместо проблемы с кодом, скорее всего, проблема с прокси-сервером.

Если вы хотите повторить попытку, вы можете;

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
...