![]() |
![]() |
![]() |
|
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
|
||||
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 - спасибо большое.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |