8.х Проблема с веб сервисом "Ошибка при вызове метода объекта модели XDTO. Неверный параметр."

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Euronymous, 23 мар 2016.

  1. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Доброго времени суток.
    Пытаюсь подключиться к сервису, вызвать метод и обратно получить конечно же возвращаемое значение.

    Код:
    Процедура ПолучитьДанныеСервер()
      
        Попытка
            ОпределениеWS = Новый WSОпределения("test.wsdl");
        Исключение
            ОпределениеWS = Неопределено;
            Отказ = ИСТИНА;
            СообщениеОбОшибке = "Ошибка получения определения сервиса: " + ОписаниеОшибки();
        КонецПопытки;
      
        WSПрокси = Неопределено;
      
        Если ОпределениеWS <> Неопределено Тогда
            Сервис             = ОпределениеWS.Сервисы.Получить(0);
            ИмяСервиса         = Сервис.Имя;
            ТочкаПодключения = Сервис.ТочкиПодключения.Получить(0).Имя;
          
            WSПрокси = Новый WSПрокси(ОпределениеWS, Сервис.URIПространстваИмен, ИмяСервиса, ТочкаПодключения);
            WSПрокси.Пользователь = "user";
            WSПрокси.Пароль       = "password";
            ТипGetSignInfo  = WSПрокси.ФабрикаXDTO.Тип(Сервис.URIПространстваИмен, "GetSignInfo");
            ПараметрыМетода = WSПрокси.ФабрикаXDTO.Создать(ТипGetSignInfo);
            СтрокаBase64    = СоздатьСтрокуBase64(СокрЛП(Параметр));
            //ПараметрыМетода.signature = Base64Значение(СтрокаBase64); Тут я уже всё перетыкал
            ПараметрыМетода.signature = СокрЛП(Параметр);//Base64Значение(СокрЛП(Параметр));
            //ПараметрыМетода.content   = ""; - необязательный параметр, не заполняем
            ОбластьВывода = WSПрокси.GetSignInfo(ПараметрыМетода);
            // Вот тут и вываливается ОбластьВывода = WSПрокси.GetSignInfo(ПараметрыМетода);
        КонецЕсли;
    
    
    КонецПроцедуры
    
    
    Функция СоздатьСтрокуBase64(Строка) Экспорт
        ВременныйФайл = ПолучитьИмяВременногоФайла();
        ЗаписьТекста = Новый ЗаписьТекста(ВременныйФайл, "CESU-8");
        ЗаписьТекста.Записать(Строка);
        ЗаписьТекста.Закрыть();
        ДД_Файла = Новый ДвоичныеДанные(ВременныйФайл);
        СтрокаBase64 = Base64Строка(ДД_Файла);
        УдалитьФайлы(ВременныйФайл);
        Возврат СтрокаBase64;
    КонецФункции

    Вылетает с ошибкой:
    {Форма.Форма.Форма(37)}: Ошибка при вызове метода контекста (GetSignInfo)
    ОбластьВывода = WSПрокси.GetSignInfo(ПараметрыМетода);
    по причине:
    Ошибка вызова операции сервиса: {urn:interface}:interfacePublicService:GetSignInfo()
    по причине:
    Неизвестная ошибка. Ошибка при вызове метода объекта модели XDTO.
    Неверный параметр.
    по причине:
    Ошибка при вызове метода объекта модели XDTO.
    Неверный параметр.

    Скриншот из дерева конфигурации:
    Ветка "Web-сервисы" - https://gyazo.com/36d8eed9ba85d2cf4f941ee32f1da03d
    Ветка "Типы объектов" модели данных - https://gyazo.com/df4b6fa8d1a63b1b2323a0457ada7199
    У обоих параметров тип одинаковый, но content не обязателен для заполнения.

    Саму ссылку просили не сбрасывать, надеюсь удастся решить проблему без неё...

    По такому же алгоритму пытаюсь подключиться к нацбанку - никаких проблем, всё отработало быстро и с первого раза...

    В чём может быть проблема? Как правильно передавать/преобразовывать строку в формат "base64Binary (http://www.w3.org/2001/XMLSchema)", вроде уже все варианты перекастовал, все танцы с бубном отплясал, а всё равно вылетает одна и та же ошибка.
    Последнее редактирование: 24 мар 2016
  2. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Решил поиграться с : "Новый ЗаписьТекста(ВременныйФайл, "CESU-8")", перепробовал все кодировки, единственное чего удалось добиться - изменение ошибки на:

    {Форма.Форма.Форма(37)}: Ошибка при вызове метода контекста (GetSignInfo)
    ОбластьВывода = WSПрокси.GetSignInfo(ПараметрыМетода);
    по причине:
    Ошибка вызова операции сервиса: {urn:interface}:interfacePublicService:GetSignInfo()
    по причине:
    Ошибка SOAP сервера: Подпись не верна

    P.S. В SoapUI всё отрабатывает правильно
  3. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Может кто-нибудь подскажет сервисы, где в качестве параметра нужно передавать тип base64Binary (http://www.w3.org/2001/XMLSchema) ?
    Хочу понять это у меня руки из булок растут или просто сервис с 1С не дружит.

    Может быть есть какие-нибудь способы проверить правильность моей итоговой кодировки?
    Последнее редактирование: 24 мар 2016
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    А если самому в 1С-ке создать пустую конфигурацию, сделать в ней веб-сервис и попробовать погонять данные?
  5. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Вообще не понял как таким образом можно проверить корректность преобразования строки в формат base64Binary.
    Поясните плз
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    На сколько понял суть проблемы:есть какие-то сложности с передачей значения типа Base64Binary во входной параметр функции удаленного веб-сервиса, так?
  7. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Видимо да... Ошибки выше указаны.
    Или проблема с кодировкой, хоть как и указывал выше перепробовал, как мне кажется все.
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    1С-ка умеет только Base64Значение и Base64Строка.

    Так понимаю, в параметр функции веб-сервиса нужно пихать Base64Значение, т.е. передаваться должно значение типа ДвоичныеДанные, а не строка.
  9. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Я вверху так и написал:)

    Получаю строку, записываю её в файл (перепробовал все типы кодировок), получаю двоичные данные файла, передаю их в Base64Строка, а потом уже строку преобразую в Base64Значение :)
    Хотя пробовал и строку передавать, и сразу двоичные данные файла передавать, и просто строку пихал в параметр, а 1Ска сама автоматом эту строку в двоичные данные переводила, но ошибки всегда одни и те же. -Dead--Dead--Dead-
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    я пока не понимаю, к чему вся эта куча преобразований типов значений, почему нельзя сделать просто:

    ЗначениеСтроквогоТипа = "hello, world!";

    WebService.Func.Parameter = base64Значение(ЗначениеСтроковогоТипа)

    ?

    так мож проблемы не в этом, а в том, что нужно еще чего-то запихать в параметры функции удаленного Web-сервиса?
  11. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Есть ещё второй параметр, но он не обязательный, я его вообще не заполняю, либо заполняю как "" - пустая строка, а ошибки все равно те же
  12. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Какой тип значения этого параметра?
  13. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    В самом верху всё уже расписал) - "У обоих параметров тип одинаковый, но content не обязателен для заполнения."
  14. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Вот не нужно придумывать :)
    Если тип значения определен, то в него и нужно пихать пустое значение этого типа. Это ж - SOAP, структура передаваемых данных - фиксированная.
  15. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    При перпедаче пустой строки параметр автоматом заполняется пустыми двоичными данными
    Как иначе создать пустые двоичные данные?
  16. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Создал пустые двоичные данные по тому же принципу - ПараметрыМетода.content = Base64Значение(СоздатьСтрокуBase64(""));
    Результат тот же.
  17. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Ну тада х.з.. Общайся с ТП удаленного Web-сервиса :)
  18. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Хочу заметить, что 1С не совсем корректно работает с некоторыми web-сервисами :)
  19. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    А как определить степень корректности если это вообще возможно?)))))
    --- Объединение сообщений, 24 мар 2016 ---
    Повторю вопрос: Может кто-нибудь подскажет сервисы, где в качестве параметра нужно передавать тип base64Binary (http://www.w3.org/2001/XMLSchema) ?
    Тогда уже точно бы понимал что косяк мой/1с/сервиса)))
  20. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    1С недоразвита в плане общения как с новыми технологиями, так и со старыми :)

Поделиться этой страницей