Веб-сервис. Ошибка. Несоответствие типов XDTO: Свойство является списковым #784533


#0 by freelog
Всем доброго дня! Вопрос для гуру веб-сервисов. Имеется следующий код: При отрабатывании выдает ошибку: {ВнешняяОбработка.MERLION_API_20.Форма.Форма.Форма}: Ошибка при вызове метода контекста (getCatalog)     Результат = ВебСервис.getCatalog("All"); по причине: При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса:  { по причине: При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Несоответствие типов XDTO: Свойство является списковым по причине: Несоответствие типов XDTO: Свойство является списковым Вопрос: чего ему надо? и как пофиксить? Заранее премного благодарен за конструктивные ответы!
#1 by freelog
вообще никаких идей?
#2 by Serginio1
#3 by Serginio1
Файлы лежат здесь
#4 by Serginio1
#5 by freelog
Спасибо большое! Это, конечно, крутяк! Но хотелось бы реализовать только средствами 1С. Все это затевалось с целью ухода от MSSOAP, а пришли в итоге к .NET. Кстати, запустить обработку так и не получилось, вываливается ошибка: {ВнешнийОтчет.Мерлион.Форма.ФормаОтчета.Форма}: Ошибка при вызове конструктора (COMОбъект)     врап=новый COMОбъект("NetObjectToIDispatch45"); по причине: -2147221005(0x800401F3): Invalid class string не подскажете, чего ему надо?
#6 by Mauser
Когда новая статья на хабре на про Ъ будет?
#7 by freelog
А по теме есть что сказать?
#8 by Serginio1
Надо зарегистрировать NetObjetToIDispatch45.dll Добавил нужные DLL и методичку Надеюсь в 1С хватит здравого смысла выпустить новую версию Native API, что бы можно было возвращать и передавать в параметрах метода объекты ВК, как это можно делать с COM. Ну, а так когда выпустят .Net Core 1.1? или если найдется, что то интересное
#9 by NoiseRND
На сколько я помню, надо передавать в упакованном виде. А у тебя просто строка передаётся. Попробуй: ПараметрXDTO = СериализаторXDTO.ЗаписатьXDTO(Параметр);
#10 by Serginio1
Кстати несколько некорректное сравнение WCF с MSSOAP. При этом WCF даже удобнее использовать чем родные средства 1С.
#11 by freelog
все отлично стартануло!.. только вот теперь вопрос: можно ли как-то быстро и красиво преобразовать получаемый com-объект в таблицу значений (окромя метода перебора)
#12 by freelog
сравнение было только в контексте использование внешних компонент хотелось реализовать задачу исключительно средствами 1С (это же не 7.7 в конце концов ;) )
#13 by Serginio1
Не ну конечно можно написать метод. Например здесь можно испоьльзовать Scripting API str = "public class ВычислительAngleSharp     |{      |public  static void ЗаполнитьТз(dynamic ТЗ)      |      |      |      |
#14 by Serginio1
Так и в 1С ты тоже будешь перебирать результат.
#15 by freelog
ясно, вопрос снимается, как дурацкий тогда еще один глупый вопрос: как получить название колонки(ключа) в ком-объекте?
#16 by Serginio1
Можно конечно написать универсальный метод для получения данных свойств или полей получив типы через рефлексию и используя люмбды. Например
#17 by Serginio1
Так и получай. Почитай для начала Использование классов .Net для новичков Там совсем немного
#18 by Serginio1
Получить названия поля можно из документации, можно посмотреть сгенерированные классы в VS. Можно через рефлексию как ты видишь в отладчике.
#19 by freelog
Почитал, закипел котелок от такого потока информации =) инфа очень интересная, особенно если вникнуть глубже в классы и их методы. Но так мы все больше отдаляемся от такой родной, но несовершенной 1С. Сейчас, хоть убейте, не могу понять, как получить название поля в COM-объекте? Вот как здесь получить наименование второго по счету поля? Или может каким-то образом весь COM-объект можно преобразовать предварительно в массив, понятный 1С`ке ?
#20 by Serginio1
Так и получай ЭлементМассива.Description
#21 by Serginio1
Для каждого стр Из Список Цикл
#22 by Serginio1
Там в отчете ессть метод для тестов роцедура ПолучитьКаталог(Команда)
#23 by freelog
Да это я видел. Все дело в том, что нужно написать функцию, которая бы в цикле оббежала элементы массива и создала колонки в ТЧ с таким же названием. Отталкиваемся от того, что названия этих колонок предварительно мы не знаем. Поэтому и спрашиваю - КАК получить именно название поля.
#24 by Serginio1
Через рефлексию. Что типа.
#25 by freelog
интересная конструкция... отладчик на ней начинает просто с ума сходить но главное, что это работает, спасибо=) НО теперь чудеса в другом: Если смотреть на "свойства", то видим все наши атрибуты, как и задумывалось: А когда начинаем их перебирать в цикле, "свойство" принимает какое-то чудное значение ((
#26 by dmitryds
во все дырки теперь будешь пихать .NET ?
#27 by Serginio1
Так посоветуй без .Net. Я делюсь решением, а ты?
#28 by dmitryds
это не решение, это дополнительные проблемы при поддержке в будущем.
#29 by Serginio1
Так дай решение! Никаких проблем не имею.
#30 by freelog
если есть вариант решения для или для - с радостью выслушаю
#31 by freelog
ну вот... спугнули единственного неравнодушного к страждущим у кого еще какие идеи есть?
#32 by Serginio1
Еще из вариантов написать свой вэб сервис прокси
#33 by freelog
с этого все и начиналось...
#34 by Serginio1
Да хоть на ПХП, питоне, Node.JS, Java, C++ Выбирай, что хошь
#35 by freelog
.net-гуру подскажите, пожалуйста, как избавиться от такой ошибки? и с чем она связана? причем возникает НЕ на всех компьютерах...
#36 by Mauser
Это одна из особенностей использования дотнета в 1С, смирись. "Используйте мою компоненту и спасибо за рыбу" =)
#37 by Serginio1
А какая версия .Net установлена? Возможно сборка дважды загружается из разных каталогов Убедитесь, что файл является допустимым .NET Framework сборки. Это исключение, если файл не является допустимым .NET Framework сборки. Для получения дополнительной информации см Ассамблее. Убедитесь, что сборка или модуль не был загружен дважды с двумя разными свидетельствами. Доказательства есть множество информации, которая представляет собой вклад политических решений безопасности, например, какие права могут быть предоставлены кодом. Для получения дополнительной информации см GacRemove и доказывания При использовании методов RegisterAssembly или UnregisterAssembly, проверьте, чтобы убедиться, что имя сборки не длиннее MAX_PATH символов. Длина имени сборки не может превышать MAX_PATH. Для получения дополнительной информации см RegisterAssembly и UnRegisterAssembly. При загрузке сателлитной сборки, убедитесь, что указанный CultureInfo соответствует CultureInfo файла. Спутниковые узлы содержат локализованные ресурсы, которые содержат не локализуемых исполняемый код и ресурсы для одной культуры, которые служат в качестве значения по умолчанию или нейтральной культуры. Для получения дополнительной информации см GetSatelliteAssembly.
#38 by Serginio1
Возможно, что то поменял в API. Пересоберу под
#39 by Bloood
Эх Мерлион Мерлион. За столько лет не может валидный веб сервис сделать. Приходится людям обходные пути искать... А я же им давал исправленный wsdl. С которым 1с работало стандартными методами. Но походу он им пришелся не по душе.
#40 by Serginio1
Выложил Новый отчет под И новый NetObjectToIDispatch45 Нужно проставить вы отчете логин пароль
#41 by Serginio1
На новом АПИ не загружаются данные ни Web client и ClientBase Проблему с Resolve подправил. Раньше такого не было.
#42 by Serginio1
загружать
#43 by Serginio1
Выложил новый апи
#44 by garikxxx
ну, вроде все работает, попробовал и массив передать. остался теперь один вопрос, как вызвать функцию из данной внешней обработки из документа-отчета или как запихнуть функции для работы с API например в общие модули? Прайс грузится из XML/XLSX это уже давно работает, но некоторые функции хотелось бы вживить в разные документы, обработки. Конфиг самописанный, формы обычные...
#45 by Serginio1
Ну вариантов куча. Начать с Использование классов .Net в 1С для новичков Основное это получить обертку над .Net классами Дальше нужно загрузить нужную сборку MLPortClient=врап.ПолучитьТипИзСборки("MerlionApi.com.merlion.api.MLService",ФайлMerlionApi); Файлы можно складывать в общую папку Например в ProgramFilesX86 Environment=врап.ПолучитьТип("System.Environment"); Каталог=Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86); Можно туда же положить и NetObjetToIDispatch45.dll Второе это получить клиента Передавай параметры в метод которые нужны
#46 by garikxxx
столкнулся еще с проблемой... получаю список заказов, начинаю их перебирать по очереди из списка полученных и получаю ошибки превышения лимита запросов. ставил задержку от 2 до 5 секунд, плюс после получения содержимого заказа на его обработку секунда уходит. Сделал чтобы перед запросом выводилось время, т.е. вижу нет превышения 1 запроса в секунду. Даже поддержка подтвердила превышений за день не было. Но ошибки постоянно валятся. Притом в разных местах. Обработка доходит до конца один раз из 3-4. Под этим же паролем открыта страничка с заказами, но в момент работы обработки ничего не делал. второй параментр указан как по умолчанию. У поддрежки одна мысль - "Проверьте, возможно, ошибка закэшировалась у Вас." Кэш я так понимаю имеется в виду связанный с SOAP. Кто что может подсказать?
#47 by Serginio1
А как ошибка то выглядит?
#48 by garikxxx
<a href="; target="_blank"><img src="; border="0"></a>
#49 by garikxxx
это основное окно ошибки, потом еще вылазит и потом уже 1С. в ошибке видно что произошло превышение лимитов. 2 обращения в 1 секунду, хотя и мерлион смотрел логи за день ни одного превышения и у меня запросы шли минимум через 3-6 сек
#50 by garikxxx
короче плюнул и сделал пока через попытку. в случае ошибки приходится нажимать "ок". но зато паузу уменьшил до 1 сек и после "ок" обработка продолжает свою работу - перезапрашивает последний не полученный документ и в итоге доходит до конца.
#51 by Serginio1
Можешь еще скинуть ошибку? Кстати, что бы ошибка не вылезало окно ошибки установи врап.ВыводитьСообщениеОбОшибке=ложь;
#52 by garikxxx
а что не открывается ссылка? нажми на первую ссылку и когда откроется браузер в конце удали кавычку.
#53 by Serginio1
Очень маленькое разрешение. Ничего не видно
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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