Форум продуктов IBM Lotus

Продукты IBM Lotus => IBM Lotus Notes & Domino => Тема начата: Solovejs от 10 Декабрь 2013, 10:52:09

Название: Импорт курсов валют (XML по URL)
Отправлено: Solovejs от 10 Декабрь 2013, 10:52:09
Добрый день!
Есть скрипт, который работает уже очень давно - импорт курсов валют с сайта ЦБРФ. Импорт производится при помощи агента по расписанию. С недавнего времени код перестал нормально работать. В ходе разбирательств было установлено, что не всегда загружается XML с сайта (иногда с 5, иногда с 10 попытки загрузки). Если запустить агент вручную от имени администратора - импорт производится (т.е. XML с сайта загружается нормально).

Прикладываю кусок кода загрузки.

Set xmldoc = CreateObject("Msxml.DOMDocument")
If xmldoc Is Nothing Then
Messagebox "При запросе курсов валют с сайта произошла ошибка. Обратитесь к администратору."
Exit Function
End If

' заполняем список курсов валют
xmldoc.async = False
url_request=URL_Common_Prefix$ & URL_Daily_Prefix$ & "?date_req=" & Format(Today, "dd/mm/yyyy")
If monthly="1" Then url_request=url_request & "&d=1"
If xmldoc.Load(url_request) Then 'запрос к ЦБ
Set NodeList = xmldoc.selectNodes("*/Valute")
For i=0 To NodeList.length - 1
Set xmlNode = NodeList.Item(i).cloneNode(True)
cur_t = xmlNode.childNodes(1).Text ' currency type
Factor = Clng( xmlNode.childNodes(2).Text ) ' nominal
Value = Cdbl(xmlNode.childNodes(4).Text ) ' value
RatesList(cur_t) = Value / Factor
Next
End If
Set xmldoc = Nothing

Вот это xmldoc.Load(url_request) стало часто возвращать False. Пробовал добавить Do While, чтобы увеличить количество попыток загрузки XML в рамках одного запуска агента, но это не привело к результатам - иногда даже с 50 раза XML не загружается.

Ситуация наблюдается на разных провайдерах, на разных серверах и хорошем канале связи.

Возможно есть идеи как решить проблему или добавить дополнительную диагностику? Может быть, увеличить тайм-аут можно как-то на Load ?
Название: Импорт курсов валют
Отправлено: Solovejs от 11 Декабрь 2013, 14:09:59
Странно, но помогло вот это:
Вместо: xmldoc.async = False
Использовать xmldoc.async = "False"
(т.е. вместо boolean использовать string)

Пока не могу понять где что изменилось..
Название: Импорт курсов валют (XML по URL)
Отправлено: Solovejs от 17 Январь 2014, 12:37:30
Резюмирую, код правильный, не работал сам сайт ЦБРФ :)