|
v7: WinHttpRequest ошибка при отправке запроса | ☑ | ||
---|---|---|---|---|
0
viacheslav
21.08.14
✎
13:24
|
Платформа 27 однопользовательская (на скульной такая же проблема)
Выполняется обращение к веб-сервису через объект WinHttpRequest.5.1, текст запроса около 950 000 символов, при вызове метода WinHttpRequest.Send платформа падает с дампом "прекращаена работа программы 1С:v7 ... widnows может провести поиск способа устранения бла бла бла" Подробные сведения об ошибке: Сигнатура проблемы: Имя события проблемы: APPCRASH Имя приложения: 1cv7l.exe Версия приложения: 7.70.0.27 Отметка времени приложения: 4573fc91 Имя модуля с ошибкой: MFC42.DLL Версия модуля с ошибкой: 6.6.8064.0 Отметка времени модуля с ошибкой: 4d79b238 Код исключения: c00000fd Смещение исключения: 000288fe Версия ОС: 6.1.7601.2.1.0.256.4 Код языка: 1049 Дополнительные сведения 1: ac1d Дополнительные сведения 2: ac1d4bd3f5ec62b81bb6dbdae31bbd47 Дополнительные сведения 3: 6bb6 Дополнительные сведения 4: 6bb616819e0b90ed10cb72a555a9b055 При меньших текстах запроса выполняется без ошибок. Опытным путем выявил пороговое значение длины запроса, при длине 511679 выполняется без ошибок, начиная с 511680 и выше - ошибка. Также отмечу, что на 1с8.2 с использованием того же объекта WinHttpRequest все выполняется без ошибок, видимо, дело в платформе 1с7 В чем причина, можно лечить, как? |
|||
1
viacheslav
22.08.14
✎
10:25
|
up
никто не сталкивался? =/ |
|||
2
Дык ё
22.08.14
✎
14:02
|
я сталкивался, можно обойти с использованием явы или дотнета. не знал, что в 8.2 работает :о
|
|||
3
Torquader
22.08.14
✎
21:50
|
Можно попробовать ServerXMLHttpRequest, который более "подвижен", а также можно сделать "прокладку" из сценария VbScript, чтобы в 1С уже заходили данные.
Не забываем, что кодировки у объекта ив 1С разные (и двухбайтовые символы UTF-8 переводятся сначала в Unicode, а потом в Win1251). Через "прокладку" VbScript (MSScriptControl) можно "кушать" строку по частям. |
|||
4
zulu_mix
22.08.14
✎
21:54
|
текст запроса в метр?? а побить на куски нельзя?
|
|||
5
trad
22.08.14
✎
23:56
|
(0) сталкивался с этой бедой и даже немного дебажил (валится где то в конструкторе COleVariant когда семерка пытается подготовить свою длинную строку для передачи в COM объект)
лечил так: ЗагрузитьВнешнююКомпоненту("OleExSup.dll"); OleExSup = СоздатьОбъект("OLEExSup"); OleExSup.InvokeOLEMethod(HTTP, "Send", СтрЗапрос); |
|||
6
Torquader
23.08.14
✎
21:16
|
(5) Если через VbScript пробовать, то не повалится - проверялось и работало.
Просто, для создания OLE-строки используется сначала преобразование Ansi->Unicode, а потом Unicode-строка копируется при помощи функции SysAllocString, чтобы её можно было "положить" в переменную Variant и отправить OLE-серверу. Если строку передавать "по частям" в VbScript, то там памяти много не потребуется. |
|||
7
viacheslav
25.08.14
✎
11:38
|
(3) через VbScript и MSScriptControl пробовал, текст запроса формирую и при вызове метода Run возникает та же ошибка. Возможно, делаю что-то не так7
В итоге сделал через сохранение скрипта в vbs-файл и далее его запуск через WshShell.Run. Только не знаю, как можно получить ответ от веб-сервиса в таком случае (сейчас это некритично, но в будущем может понадобиться). (4) к сожалению, побить на куски нельзя. Работа сервиса так устроена, что на стороне сервера предыдущие переданные клиентом данные затираются новыми. |
|||
8
viacheslav
25.08.14
✎
11:43
|
(5) попробую вариант с OleExSup
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |