Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: WinHttpRequest ошибка при отправке запроса

v7: WinHttpRequest ошибка при отправке запроса
Я
   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

В чем причина, можно лечить, как?
   viacheslav
 
1 - 22.08.14 - 10:25
up
никто не сталкивался? =/
   Дык ё
 
2 - 22.08.14 - 14:02
я сталкивался, можно обойти с использованием явы или дотнета. не знал, что в 8.2 работает :о
   Torquader
 
3 - 22.08.14 - 21:50
Можно попробовать ServerXMLHttpRequest, который более "подвижен", а также можно сделать "прокладку" из сценария VbScript, чтобы в 1С уже заходили данные.
Не забываем, что кодировки у объекта ив 1С разные (и двухбайтовые символы UTF-8 переводятся сначала в Unicode, а потом в Win1251).
Через "прокладку" VbScript (MSScriptControl) можно "кушать" строку по частям.
   zulu_mix
 
4 - 22.08.14 - 21:54
текст запроса в метр?? а побить на куски нельзя?
   trad
 
5 - 22.08.14 - 23:56
(0) сталкивался с этой бедой и даже немного дебажил (валится где то в конструкторе COleVariant когда семерка пытается подготовить свою длинную строку для передачи в COM объект)

лечил так:

ЗагрузитьВнешнююКомпоненту("OleExSup.dll");
OleExSup = СоздатьОбъект("OLEExSup");
OleExSup.InvokeOLEMethod(HTTP, "Send", СтрЗапрос);
   Torquader
 
6 - 23.08.14 - 21:16
(5) Если через VbScript пробовать, то не повалится - проверялось и работало.
Просто, для создания OLE-строки используется сначала преобразование Ansi->Unicode, а потом Unicode-строка копируется при помощи функции SysAllocString, чтобы её можно было "положить" в переменную Variant и отправить OLE-серверу.
Если строку передавать "по частям" в VbScript, то там памяти много не потребуется.
   viacheslav
 
7 - 25.08.14 - 11:38
(3) через VbScript и MSScriptControl пробовал, текст запроса формирую и при вызове метода Run возникает та же ошибка. Возможно, делаю что-то не так7

В итоге сделал через сохранение скрипта в vbs-файл и далее его запуск через WshShell.Run. Только не знаю, как можно получить ответ от веб-сервиса в таком случае (сейчас это некритично, но в будущем может понадобиться).

(4) к сожалению, побить на куски нельзя. Работа сервиса так устроена, что на стороне сервера предыдущие переданные клиентом данные затираются новыми.
   viacheslav
 
8 - 25.08.14 - 11:43
(5) попробую вариант с OleExSup

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.