Имя: Пароль:
1C
1C 7.7
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
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан