Имя: Пароль:
1C
1C 7.7
v7: MSSOAP вылетает 1с если передать в параметре более 500Кб текста
0 Vetal232
 
05.05.13
00:12
При передаче в качестве параметра строки XML более 500 Кб (вычислено опытным путем) приложение 1с 7.7 крашится.
http://shot.qip.ru/00a74Z-4hT9jRL1e/

Все вызовы с меньшими по размеру сроками проходит отлично.

SoapClient = СоздатьОбъект("MSSOAP.SoapClient30");
SoapClient.MSSOAPInit(ПутьКСервису);
SoapClient.Send(XML);
1 ЧеловекДуши
 
05.05.13
09:49
(0) Выбирай на своё усмотрение :)
Работа с ROM-Mail.dll
Эл. почта из 1с
Отправка почты, DialMail
2 ЧеловекДуши
 
05.05.13
09:50
+(0) Он же тебе по русски пишет, что ты запустил программу в монопольном режиме, обломись
3 Тьма
 
05.05.13
11:33
(2)Де это он такое пишет? Может, вы не знаете, что такое "single-user"?
4 Torquader
 
05.05.13
14:02
Видимо, xml передаётся как строка, а строка такого объёма в памяти 1С просто не помещается - выдаётся ошибка выделения памяти (не забываем, что у 1С однобайтовая кодировка, а в OLE и других местах используются два байта - при передаче происходит перекодирование). У 1С нет обработчика выделения памяти - если память не выделилась, то программа аварийно закрывается.
5 Vetal232
 
05.05.13
14:26
(1) Rom-mail пользовались, знаем, только к SOAP и веб-сервисам оно отношение не имеет.
6 Vetal232
 
05.05.13
14:27
(4) Вот это больше похоже на истину. Пробовал добавлять РазделительСтроки - ничего не дало.
7 Torquader
 
05.05.13
14:27
(5) Тогда ServerXmlHttpRequest - и делать всё, что хочется, любые запросы и ответы с помощью xml программируются на ура - но только придётся всё руками программировать.
8 Torquader
 
05.05.13
14:28
(6) Сервер твой или уже готовый ?
Просто 5 кб текста в памяти как строка - это не есть хорошо - можно по частям, если сервер этому обучить.
9 Vetal232
 
05.05.13
14:36
(8) мне нужно передать каталог товар с кучей полей, через сторонние клиенты, и через 1с8 проходит, серверную сторону менять не могу
10 Vetal232
 
05.05.13
15:44
(7) попробовал MSXML2.xmlHttp, таже проблема, ведь параметр передается туда таким же образом.
11 Torquader
 
05.05.13
17:32
(10) Попробуй сделать вставку на VbScript в 1С, в этой вставке получи данные из xml, разбери по полям и передавай в 1С по частям - возможно, что и в районе 0.5 Гб данных пролезет.
12 Тьма
 
05.05.13
18:44
(11)Так он не получает, а наоборот, отправляет.
13 Torquader
 
05.05.13
18:52
(12) А какая разница - преобразование строк из ANSI в UNICODE в любом случае будет выполняться.
Я бы сделал через VbScript:
Obj=CreateObject("MSScriptControl.ScriptCOntrol");// ну или как его зовут
Obj.Language="VbScript";
s="Dim Str";
s=s+LineBreak+"Sub AddStr(ByRef s)";
s=s+LineBreak+"If IsEmpty(Str)=True Then Str=s Else Str=Str & s";
s=s+LineBreak+"End Sub";
Obj.AddCode(s);
// передача длинной строки
Obj.Run("AddStr",ЧастьСтроки);
Obj.Run("AddStr",ДругаяЧастьСтроки);
// ну и так далее, пока не надоест
14 Vetal232
 
05.05.13
18:54
(13) Сейчас попробую
15 Vetal232
 
05.05.13
20:21
Заработало!!! Только сделал немного по другому.
Сохранил XML в файл, чтобы не разбивать на части.

КодVB= "
|Sub Send()
|Dim XML
|set SOAPClient = createobject(""MSSOAP.SOAPClient30"")
|set DOMDoc = createobject(""MSXML2.DOMDocument"")
|SoapClient.MSSOAPInit(""WSDL сервера "")
|CALL DOMDoc.Load(""мой большой XML"")
|XML = DOMDoc.xml
|CALL SoapClient.Send(XML)
|End Sub
|";
16 Vetal232
 
05.05.13
20:24
(13) Torquader - спасибо большое.