Обработка тайм-аута MSXML

На одном из наших веб-сайтов есть сбой, который иногда приводит к его отключению - необходимо перезапустить серверную часть. Замена еще не готова к производству, поэтому я создал сценарий VBS, который опрашивает сервер и перезапускает его, если:

а) Код состояния HTTP ‹> 200, или б) Страница загружается, но подстрока на странице не найдена.

Время проверки статуса HTTP истекает, если служба tomcat не отвечает; Я хотел бы вызвать функцию, если это произойдет. Можно ли зафиксировать и обработать тайм-аут? Это отрывок из моих соответствующих фрагментов кода.

xmlhttp.setOption 2, 13056
xmlhttp.open "get", "https://www.mywebsite.com/thisurl", false
xmlhttp.send

if xmlhttp.status <> 200 then
    call restartTomcat()
    call emailAlert()
end if

Заранее спасибо.


person user1421795    schedule 08.10.2019    source источник


Ответы (1)


К сожалению, вы не можете создавать обработчики событий объекта в VBScript.

Возможно, вы можете использовать метод .setTimeouts resolveTimeout, connectTimeout, sendTimeout, receiveTimeout объекта HTTP-запроса. Добавьте это перед вызовом метода send. Вот описание параметров:

resolveTimeout

Длинное целое число. Значение применяется для сопоставления имен узлов (например, «www.microsoft.com») с IP-адресами; значение по умолчанию бесконечно, что означает отсутствие тайм-аута.

connectTimeout

Длинное целое число. Значение применяется для установления сокета связи с целевым сервером со значением тайм-аута по умолчанию 60 секунд.

sendTimeout

Длинное целое число. Значение применяется к отправке отдельного пакета данных запроса (если есть) через коммуникационный сокет на целевой сервер. Большой запрос, отправляемый на сервер, обычно разбивается на несколько пакетов; Тайм-аут отправки применяется к отправке каждого пакета индивидуально. Значение по умолчанию - 30 секунд.

receiveTimeout

Длинное целое число. Значение применяется к получению пакета данных ответа от целевого сервера. Большие ответы будут разбиты на несколько пакетов; Тайм-аут приема применяется к выборке каждого пакета данных из сокета. Значение по умолчанию - 30 секунд.

Вы можете проверить Статус, как вы это делаете сейчас, после send звонка. Это должно помочь вам справиться с не отвечающим сервером.

person Étienne Laneville    schedule 08.10.2019
comment
Спасибо, завтра утром поэкспериментирую и посмотрю, что скинуть вместе! - person user1421795; 08.10.2019
comment
Спасибо, это сработало. Я добавил строку возобновления ошибки и указал таймауты; это позволило мне проверить код состояния HTTP или его отсутствие и предпринять соответствующие действия. - person user1421795; 09.10.2019
comment
Рад слышать это. Пожалуйста, отметьте вопрос как ответ, когда у вас будет возможность! - person Étienne Laneville; 09.10.2019
comment
Я искал возможность сделать это, но не могу найти нигде, чтобы принять ответ. Я чувствую себя довольно тупым. - person user1421795; 10.10.2019
comment
@ user1421795 обычно вы можете щелкнуть серую галочку слева от ответа под общим количеством голосов за / против. - person Étienne Laneville; 10.10.2019
comment
Как неловко; Спасибо. - person user1421795; 11.10.2019
comment
Спасибо! Вернитесь к Stack Overflow, если столкнетесь с другими проблемами! - person Étienne Laneville; 11.10.2019