|
Асинхронные 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С для новичков |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |