Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Снять задачу (свое приложение) / 11 сообщений из 11, страница 1 из 1
24.06.2011, 01:36
    #37322866
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снять задачу (свое приложение)
Программа работает с одной страничкой сайта, прослеживает изменения на сайте и уведомляет. Но по неизвесным причинам виснет. Работал через CreateObject("InternetExplorer.Application") но стало лучше работать на CreateObject("MSXML2.XMLHTTP"), хотя кажется никакой разницы. Компилированный проэкт запускаю через автозапуск, раз-два-три на день бывает виснет или четко работает. Добавил socket на проэкт и другой програмкой улавливаю пульс той програмки. Если пульса нет, как снять задачу ?
...
Рейтинг: 0 / 0
24.06.2011, 09:23
    #37323025
Снять задачу (свое приложение)
Андрей159,
с помошью WMI
...
Рейтинг: 0 / 0
24.06.2011, 09:54
    #37323062
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снять задачу (свое приложение)
Андрей159, разница между объектами есть и не маленькая. Виснет из-за того, что скорее всего запрос выполняется синхронно. А во вторых, запрос может потеряться, а таймаут не используется
...
Рейтинг: 0 / 0
24.06.2011, 12:17
    #37323394
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снять задачу (свое приложение)
> Автор: Андрей159

Попробуй сделать асинхронный запрос. Я на фокспро делал это так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
This.Post_String = "https://....ua/...?stdate=" + Dtoc(dtAccStart) + "&endate=" + Dtoc(dtAccEnd) + 
"&PUREXML=true"

With This.XmlHttp
    .Open "POST", This.Post_String, True ' True отвечает за асинхронность запроса
    .SetRequestHeader "Host", "https://....ua"
    .SetRequestHeader "Content-type", "text/xml"
    .SetRequestHeader "Cache-Control", "no-store, no-cache"
    .SetRequestHeader "Pragma", "no-cache"
    .SetRequestHeader "User-agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.3) Gecko/20100401 
Firefox/3.6.3 ( .NET CLR 3.5.30729)"
    zapros = ""
' Собственно сам запрос
    .Send (Null)
Endwith
' Ожидаем ответа от веб-сервиса или окончания таймаута ожидания
IsSuccesful = True
Do While This.XmlHttp.readyState <>  4  And IsSuccesful
    DoEvents Force
'   Проверяем, если запрос длится больше минуты, прерываем его и сообщаем об ошибке
    If Abs(Minute(DateTime()) - Minute(dtSt)) >  2  Then
        IsSuccesful = False
    End If
Enddo
If !IsSuccesful Then
    zapros = "-1"
'       Messagebox("Сервис банка не отвечает длительное время. Данные не получены." + Chr(13)+Chr(10) + ;
'           "Попробуйте повторить операцию позднее", 0+48+4096, "Получение информации из банка", 5000)
Else
    zapros = This.XmlHttp.responseXML.XML
'   ddd = XMLHTTP.getResponseHeader("Last-Modified")
End If
Это кусочек из функции получения данных из банка
Dtoc - функция преобразует дату в строку следующего вида: "24.06.2011"

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
24.06.2011, 13:33
    #37323564
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снять задачу (свое приложение)
пробуй камнемАндрей159,
с помошью WMI

Приеду домой, поэксперементирую
...
Рейтинг: 0 / 0
24.06.2011, 13:42
    #37323583
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снять задачу (свое приложение)
to VSVLAD:
Согласен

to Игорь Горбонос
В прошлый раз я с этим так и не разобрался. Были ошибки... Делал сокетом, трудно, но получилось. Нужно было тестовый проэкт сохранить как функцию. Придется заново ковыряться. Socket хоть нигде не следит

Всем спасибо за помощь
...
Рейтинг: 0 / 0
24.06.2011, 20:36
    #37324325
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снять задачу (свое приложение)
Непонял в этом месте
DoEvents Force

DoEvents - понятно

а откуда Force. Это ключевое слово (которое мне неизвестно) или переменная (которая не описанна в даном примере) ?
...
Рейтинг: 0 / 0
24.06.2011, 21:28
    #37324359
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снять задачу (свое приложение)
это FoxPro, автор примера указал в сообщении.
...
Рейтинг: 0 / 0
25.06.2011, 12:34
    #37324646
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снять задачу (свое приложение)
> Автор: Андрей159
> Непонял в этом месте
> DoEvents Force
> а откуда Force. Это ключевое слово (которое мне неизвестно) или переменная (которая не описанна в даном примере)
> ?


Сори недовычистил :( Это ключевое слово в FoxPro.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
26.06.2011, 17:49
    #37325197
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снять задачу (свое приложение)
Мой косяк. Уже с таким сталкивался и раньше.
У меня мало чем отличается XmlHttp использование. Просто у меня SetRecuestHeader не указан и передается по умолчанию свой (инспектировал в опере). Вот уже сутку работает нормально после добавление между DoEvents "разрешение" (у меня переменная Public DozvDaliPostData as Boolean)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Public Function GET_MSXML_HTTP(ByVal strURL As String) As String
    Dim oHttp As Object
    Dim z As Long
    
    On Error Resume Next
    Set oHttp = CreateObject("MSXML2.XMLHTTP")
    If Err.Number <>  0  Then
        Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
    End If
    On Error GoTo  0 
    If oHttp Is Nothing Then
        MsgBox "Не удалось инициализировать объект MSXML!"
        Exit Function
    End If
    On Error Resume Next
     ==>DozvDaliPostData = False
     oHttp.Open "GET", strURL, False
     oHttp.send
che:
     If oHttp.readyState <>  4  Or oHttp.Status <>  200  Then
       z = z +  1  ' >>>Счетчик попыток<<<
       Form1.Caption = z
       DoEvents
       If z >  20  Then
         Set oHttp = Nothing
         ==>DozvDaliPostData = True
        Exit Function
       End If
       GoTo che
     End If
     ==>DozvDaliPostData = True
     
    On Error GoTo  0 
    GET_MSXML_HTTP = oHttp.responseText
    Set oHttp = Nothing
End Function


Код: plaintext
1.
2.
3.
Private Sub Timer1_Timer() ' на 60 секунд
  ==>If DozvDaliPostData = False Then Exit Sub
    Call Command10_Click
end if


У меня получается DoEvents накапливал паралельные исполнения (много потоков) GET_MSXML_HTTP. Возможно из-за этого и висело. Когда сервер нормально отвечал - все было впорядке. Как только начинал опаздывать, так у меня и все висело неделю. (If z > 20 Then было z>100)
...
Рейтинг: 0 / 0
26.06.2011, 17:53
    #37325200
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снять задачу (свое приложение)
Мой косяк. Уже с таким сталкивался и раньше.
У меня мало чем отличается XmlHttp использование. Просто у меня SetRecuestHeader не указан и передается по умолчанию свой (инспектировал в опере). Вот уже сутку работает нормально после добавление между DoEvents "разрешение" (у меня переменная Public DozvDaliPostData as Boolean)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Public Function GET_MSXML_HTTP(ByVal strURL As String) As String
    Dim oHttp As Object
    Dim z As Long
    
    On Error Resume Next
    Set oHttp = CreateObject("MSXML2.XMLHTTP")
    If Err.Number <>  0  Then
        Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
    End If
    On Error GoTo  0 
    If oHttp Is Nothing Then
        MsgBox "Не удалось инициализировать объект MSXML!"
        Exit Function
    End If
    On Error Resume Next
     DozvDaliPostData = False
     oHttp.Open "GET", strURL, False
     oHttp.send
che:
     If oHttp.readyState <>  4  Or oHttp.Status <>  200  Then
       z = z +  1  ' Счетчик попыток
       Form1.Caption = z
       DoEvents
       If z >  20  Then
         Set oHttp = Nothing
         DozvDaliPostData = True
        Exit Function
       End If
       GoTo che
     End If
     DozvDaliPostData = True
     
    On Error GoTo  0 
    GET_MSXML_HTTP = oHttp.responseText
    Set oHttp = Nothing
End Function


Код: plaintext
1.
2.
3.
Private Sub Timer1_Timer() ' на 60 секунд
  If DozvDaliPostData = False Then Exit Sub
    Call Command10_Click
end if


У меня получается DoEvents накапливал паралельные исполнения (много потоков) GET_MSXML_HTTP. Возможно из-за этого и висело. Когда сервер нормально отвечал - все было впорядке. Как только начинал опаздывать, так у меня и все висело неделю. (If z > 20 Then было z>100)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Снять задачу (свое приложение) / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]