|   |   | 
| 
 | Асинхронные WinHttp.WinHttpRequest.5.1 и MSXML2.XMLHTTP | ☑ | ||
|---|---|---|---|---|
| 0
    
        qwerty 24.01.16✎ 12:29 | 
        Платформа 8.3.7, УФ
 Хочу асинхронно получить данные с сайта. При использовании WinHttp.WinHttpRequest.5.1: WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); WinHttp.Option(2, "utf-8"); ДобавитьОбработчик WinHttp.OnError, http_OnError; ДобавитьОбработчик WinHttp.OnResponseDataAvailable, http_OnResponseDataAvailable; ДобавитьОбработчик WinHttp.OnResponseFinished, http_OnResponseFinished; ДобавитьОбработчик WinHttp.OnResponseStart, http_OnResponseStart; WinHttp.Open("GET", "https://btc-e.com/api/3/ticker/btc_usd", Истина); WinHttp.Send(); 1с вылетает при наступлении события. При использовании MSXML2.XMLHTTP XmlHttp = Новый COMОбъект("MSXML2.XMLHTTP"); ДобавитьОбработчик XmlHttp.OnReadyStateChange, http_OnReadyStateChange; пишет Событие объекта не обнаружено (OnReadyStateChange) ЧЯДНТ? | |||
| 1
    
        spock 24.01.16✎ 12:55 | 
        (0)биржа открывается браузером? Может провайдер блокирует трафик?     | |||
| 2
    
        spock 24.01.16✎ 12:57 | ||||
| 3
    
        qwerty 24.01.16✎ 16:04 | 
        Сайт открывается. Синхронно все работает, не работает именно асинхронно     | |||
| 4
    
        qwerty 24.01.16✎ 16:49 | 
        Я так понимаю, больше нет способов получить данные с сайта асинхронно?     | |||
| 5
    
        Serginio1 24.01.16✎ 17:07 | 
        Если не получится то можно использовать WebClient и
 http://catalog.mista.ru/public/417830/ https://msdn.microsoft.com/ru-ru/library/system.net.webclient.downloaddatacompleted(v=vs.110).aspx | |||
| 6
    
        Serginio1 24.01.16✎ 17:08 | ||||
| 7
    
        Lexey_ 24.01.16✎ 17:31 | 
        (4) фоновое задание     | |||
| 8
    
        Lexey_ 24.01.16✎ 17:39 | 
        +(7) + HTTPЗапрос и HTTPСоединение     | |||
| 9
    
        qwerty 24.01.16✎ 18:21 | 
        (7) Было через фоновное сделано. В файловом варианте фоновые как нужно не работают.     | |||
| 10
    
        Serginio1 24.01.16✎ 19:57 | 
        6+ Вот более полный пример
 https://msdn.microsoft.com/ru-ru/library/system.net.downloadstringcompletedeventargs(v=vs.110).aspx | |||
| 11
    
        Serginio1 24.01.16✎ 20:39 | 
        (0) Если нужно помочь то обращайся     | |||
| 12
    
        qwerty 24.01.16✎ 21:24 | 
        (11) Не планировал .net применять. Хочу разобраться с указанными объектами.     | |||
| 13
    
        Serginio1 24.01.16✎ 21:48 | 
        Ну если не получится обращайся. .Net ничем не хуже MSXML2.XMLHTTP даже возможностей больше     | |||
| 14
    
        Serginio1 24.01.16✎ 21:55 | 
        (12) А можешь объяснить почему не планируешь?     | |||
| 15
    
        qwerty 25.01.16✎ 10:18 | 
        Апну разок, может будут у кого идеи. Если нет, то буду пробовать способ от Serginio1     | |||
| 16
    
        Serginio1 25.01.16✎ 10:21 | 
        (15) Набросал на скору руку правда для обычного приложения
 http://files.rsdn.ru/19608/%d0%a2%d0%b5%d1%81%d1%82WebClient.zip Ну и NetObjectToIDispatch для него http://files.rsdn.ru/19608/%d0%a4%d0%b0%d0%b9%d0%bb%d1%8bNetObjectToIDispatch.zip | |||
| 17
    
        qwerty 25.01.16✎ 11:14 | 
        Не заработало
 {Форма.ФормаОтчета.Форма(4)}: Метод объекта не обнаружен (СоздатьОберткуДляСобытий) ОберткаСобытий=врап.СоздатьОберткуДляСобытий(объект); dll зарегестрирована | |||
| 18
    
        Serginio1 25.01.16✎ 11:23 | 
        А какую DLL регистрировал? 
 Попробуй \Тест\ФайлыNetObjectToIDispatch\NetObjetToIDispatch45\NetObjetToIDispatch45\bin\Debug\ Может я оставил старую в Тест\ФайлыNetObjectToIDispatch\DLLNetObjetToIDispatch45\ Сейчас выложу последнюю без SignalR | |||
| 19
    
        Serginio1 25.01.16✎ 11:27 | 
        Выложил последнюю
 http://files.rsdn.ru/19608/%d0%a4%d0%b0%d0%b9%d0%bb%d1%8bNetObjectToIDispatch.zip Но к ней нужна .Net Framework 4.6.1 https://msdn.microsoft.com/Ru-ru/library/ms171868(v=vs.110).aspx#v46 | |||
| 20
    
        Serginio1 25.01.16✎ 11:29 | 
        Да и запусти из толстого клиента     | |||
| 21
    
        qwerty 25.01.16✎ 11:32 | 
        С этой заработало. Запускаю пока из толстого клиента.
 Но, есть небольшая проблема. Делаю изменения в обработке, сохраняю, переоткрываю обработку в предприятии - изменений не видно. Изменения появляются только когда перезапускаешь предпрятие. Наверное, созданные объекты подвисают... | |||
| 22
    
        Serginio1 25.01.16✎ 11:58 | 
        Попробуй
 Процедура ПриЗакрытии() // Вставить содержимое обработчика. Врап.ОчиститьСобытияОбъекта(Клиент); Врап.ОчиститьСобытияОбъекта(ОберткаСобытий); ОберткаСобытий=Неопределено; Клиент.Dispose(); Клиент=Неопределено; GC=Врап.ПолучитьТип("System.GC"); GC.Collect(); GC.WaitForPendingFinalizers(); Врап= Неопределено; КонецПроцедуры | |||
| 23
    
        Serginio1 25.01.16✎ 12:01 | 
        Да там еще в
 Процедура DownloadProgressChanged(Данные) Сообщить("DownloadProgressChanged "+Врап.ВСтроку(Данные)); e=Данные.e; // Почему то последний парамер это Objec[] // Просто добавь доплнительный параметр Сообщить(String.Format("загружено {0} из {1} байт. {2} % complete...", e.BytesReceived, e.TotalBytesToReceive, e.ProgressPercentage, 0)); // Или можно вызвать метод Сообщить(Врап.ВыполнитьМетод(String,"Format","загружено {0} из {1} байт. {2} % complete...", e.BytesReceived, e.TotalBytesToReceive, e.ProgressPercentage)); КонецПроцедуры | |||
| 24
    
        Serginio1 25.01.16✎ 12:32 | 
        Только зачем тебе асинхронно? Там данные быстро получаются.
 Просто при первом вызове происходит компиляция. Последующие вызовы мгновенны | |||
| 25
    
        qwerty 25.01.16✎ 13:06 | 
        (24) Сайт отдает данные где-то через 1 сек. На это время форма "подвисает" и работать не комфортно.     | |||
| 26
    
        Serginio1 25.01.16✎ 13:26 | 
        (25) То есть у тебя в фоне через таймер данные подгружаются?     | |||
| 27
    
        Serginio1 25.01.16✎ 14:48 | 
        Там несложно переделать и на УФ, просто у меня генерируются методы для толстого клиента. Можешь сам посмотреть в обработке ТестСобытийИзмененийВДиректории.epf там генерируются модули. В том числе можно использовать ОбработкаВнешнегоСобытия
 Для WebClient вводишь В поле Полное имя файла System.Net.WebClient и жмакаешь на "Получить описание модулей" | |||
| 28
    
        Serginio1 25.01.16✎ 16:28 | 
        Да еще после создания установи
 Клиент.Encoding = Врап.ПолучитьТип("System.Text.Encoding").UTF8; Иначе будешь работать с кодировкой по умолчанию 1251 | |||
| 29
    
        Serginio1 28.01.16✎ 11:57 | 
        Добавил класс для выполнения асинхронно асинхронных методов
 Использование классов .Net в 1С для новичков | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |