v7: Ошибка при отправке файла как base64binary по SOAP #664001


#0 by bahamut13
Здравствуйте, помогите разобраться. В 1с7 выполняется следующий vbscript: |Sub Send SendBinary  в WSDL файле: Ошибка: Client: Client:Type conversion failure for element Data  HRESULT=0x80020005: Несовпадение типов. - Client:Unspecified client error. HRESUL Т.е. он вроде как не может привести строку B64str к типу base64binary? Но почему и как от этого избавиться? На 1с8 все работает норм: ВебСервис.SendBinary(Пользователь,Пароль,GLN,Реляция,ИмяФайла,Данные) Хотя Данные также имеют тип Строка, но нужно чтобы и на 1с7 работало. Поможет ли замена MSSOAP.SOAPClient30 на к-л другой? Или же вставку делать не на vbscript?
#1 by Ковычки
в 77 базе 64 делается без мсскриптконтрола
#2 by bahamut13
да-да, я нашел несколько внешних компонент и даже метод 1с который конвертирует в base64 - но вопрос не в этом, а в том почему в данном примере возникает ошибка несоответствия типов. То что SendBinary вызывается из vbscript прошу принять как данность - так надо и меняться если и будет, то разве что язык сей вставки.
#3 by ЧеловекДуши
#4 by ЧеловекДуши
DIME и бинарные вложения Поскольку XML представляет собой текстовый формат, для передачи бинарных данных требуется их перекодировка, например, в кодировку base64. Это означает, что в случае передачи бинарных данных, во-первых, увеличивается время вызова, так как перекодировка в base64 занимает некоторое время, а, во-вторых, увеличивается объем данных, которые необходимо передать по HTTP. SOAP Toolkit, начиная с версии 3.0, поддерживает новый формат HTTP-запросов, называемый DIME – Direct Internet Message Encapsulation. DIME является по сути бинарным форматом передачи данных и не требует их перекодировки. Сообщение в формате DIME представляет собой совокупность DIME-записей. Каждая запись состоит из заголовка и бинарных данных. Заголовок записи включает в себя длину записи, тип данных и идентификатор записи. Такая организация позволяет быстро найти нужную запись и прочитать данные из нее. SOAP Toolkit использует формат DIME для передачи бинарных вложений. Преимущество передачи бинарных данных в виде вложений заключается в том, что данные будут передаваться более эффективно и на их обработку потребуется меньше времени и ресурсов.
#5 by ЧеловекДуши
Dim o As MSSOAPLib30.SoapClient30 Set o = New MSSOAPLib30.SoapClient30 o.MSSoapInit "D:ProjectsSOAPSample2IISSample2.WSDL" Dim f As FileAttachment30 Set f = New FileAttachment30 o.PutFile f
#6 by sttt
у тебя процедура называется CALL SoapClient.SendBinary - ПередатьБинарник а ты ему строку передаешь))
#7 by bahamut13
Угу, так было бы намного проще... но файл должен передаваться на сервер как параметр <s:element maxOccurs="1" minOccurs="0" name="Data" type="s:base64Binary"/> а не как вложение и менять серверную часть я не могу А вы знаете другое представление base64binary в vb? Я нет, потому и передаю в виде строки. Тем более что на 1с8 передача строки проходит нормально, а тут он ругается на несоответствие типов)) У кого еще какие идеи по поводу того что 1с8 воспринимает строки такого типа "0YHRgtGA0L7QutCwINGBINC30LDQutC+0LTQuNGA0L7QstCw0L3QvdGL0LzQuCDQsiBiYXNlNjQg0LTQsNC90L3Ri9C80Lg=" как base64binary, а 1с7 и vbscript не хотят?
#8 by Ковычки
0YHRgtGA0L7QutCwINGBINC30LDQutC+0LTQuNGA0L7QstCw0L3QvdGL0LzQuCDQ siBiYXNlNjQg0LTQsNC90L3Ri9C80Lg=
#9 by Ковычки
стр="0YHRgtGA0L7QutCwINGBINC30LDQutC+0LTQuNGA0L7QstCw0L3QvdGL0LzQuCDQ" "siBiYXNlNjQg0LTQsNC90L3Ri9C80Lg=";
#10 by bahamut13
А это вообще к чему? Если про то что не пытался ли я делать что-то типа хардкодного B64str = ""0YHRgtGA0L7QutCwINGBINC30LDQutC+0LTQuNGA0L7QstCw0L3QvdGL0LzQuCDQsiBiYXNlNjQg0LTQsNC90L3Ri9C80Lg="" то да - пытался, не прошло... может в vb есть специальный тип для base64binary?
#11 by Ковычки
читайте вниматель и
#12 by bahamut13
И-и? Даже B64str = ""0Ks="" не отправляется. vb просто не хавает строки как base64biary. Любой длинны. Любого символьного состава. Как убедить vb или MSSOAP.SOAPClient30 что данная строка есть base64biary? Неужели придется самому xml-запрос составлять (что-то такое где-то видел, но надо еще вспомнить и найти) для сервера и так работать?
#13 by Ковычки
#14 by bahamut13
В общем думаю остановиться на следующем варианте: с помощью soapUI получил текст запроса и параметры setRequestHeader на основе wsdl файла... посмотрю еще максимальный размер отсылаемого файла и может придется опять все на vbscript переводить, но это не слишком сложно - главное не придирается к содержимому переменной data =)
#15 by ЧеловекДуши
А зачем тебе это, попробуй фалик просто указать :)
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С