Помощь с Web сервисом #760061


#0 by DaDe
Всем доброго времени суток. Помогите, пожалуйста, разобраться в ситуации, а то уже мозги кипят. Есть веб сервис При передаче созданного параметра для функции getCatalog СтроковыйТип=Прокси.ФабрикаXDTO.Тип(";); WSПараметр=Прокси.ФабрикаXDTO.Создать(СтроковыйТип,"N1"); Получаю ошибку: Ошибка вызова операции сервиса:  { по причине: Неизвестная ошибка. Ошибка преобразования данных XDTO: Чтение объекта типа: { - [2,186] Проверка дополнительного свойства:     форма: Элемент     имя: item по причине: Ошибка преобразования данных XDTO: Чтение объекта типа: { - [2,186] Проверка дополнительного свойства:     форма: Элемент     имя: item по причине: Ошибка проверки данных XDTO: Структура объекта не соответствует типу: { В чем может быть проблема? 1C не может распознать полученный ответ? Другими средствами проблем с данным сервисом нет. Данные получаются. Хотелось бы реализовать штатными средствами, хотя понимаю, что тут очень много проблем. Уже весть форум перешерстил, находил схожие проблемы, но решения не нашел. Был бы признателен за помощь.
#1 by GenV
Другими средствами тоже преобразовывал параметр к типу строке или просто строку-параметр передавал?
#2 by Serginio1
Бери в руки Фиддлер и смотри результат ответа. Там может быть null.
#3 by Serginio1
Если ответ не валидный пиши в службу поддержки
#4 by DaDe
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="; xmlns:xsd="; xmlns:soap=" xmlns=";
#5 by DaDe
Можешь подскажешь, установил Фиддлер, но через прокси возникает другая ошибка. wsdl он нормально подгружает При посылке данных Прокси.getCatalog(WSПараметр) сервер возвращает статус 500. SOAP-ERROR: Parsing WSDL: Couldn't load from '' : failed to load external entity ";
#6 by Serginio1
Ключевое слово https ОпределениеТ=Новый WSОпределения(" ");     WSСервис=ОпределениеТ.Сервисы[0];     Прокси=Новый WSПрокси(ОпределениеТ, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя,,,Новый ЗащищенноеСоединениеOpenSSL);      Рез=Прокси.getCatalog("N1");
#7 by DaDe
Если ты о сертификате, то он добавлен.
#8 by Serginio1
Нет я про Новый ЗащищенноеСоединениеOpenSSL);
#9 by DaDe
Результат не изменился. Причем самое что интересное когда посылаешь Рез=Прокси.helloWorld("123"); Ответ приходит - Hello, 123 Т.е. ответ в строковых типах он распознает, а сложных видимо нет.
#10 by Serginio1
Тебе нужно посмотреть результат. Можешь посмотреть через SoapUI
#11 by Serginio1
А фиддлер, что показывает?
#12 by DaDe
Понял, попробую с SoapUI разобраться. Дак с ним возникает ошибка на платформе 8.1 статус - 500 на 8.3 При создании описания сервиса произошла ошибка. по причине: Ошибка работы с Интернет:  Удаленный узел не прошел проверку Причем пробовал IEInspector, он перехватывает http,https, но эти HTTPS запрос не хочет.
#13 by DaDe
SoapUI формирует запрос <soapenv:Envelope xmlns:soapenv="; xmlns:mls="; и в итоге получаю ответ SOAP-ENV:Envelope xmlns:SOAP-ENV="; xmlns:ns1=";
#14 by makson999
в винде возможно
#15 by romix
Элементарные типы по идее должно воспринимать без заморочек -  можно например читать строку и парсить ее следующим этапом.
#16 by Serginio1
#17 by Serginio1
Не совсем описание того, что ожидается
#18 by Serginio1
Хотя
#19 by Serginio1
Попробуй через VS
#20 by EvgeniuXP
сложные типы тоже легко передаются, читать нужно документацию правильно.
#21 by DaDe
что есть VS? дак, кто-бы спорил, ведь разработчик веб сервиса не я и мне лишь нужно получить данные.
#22 by Serginio1
31 visual studio наверняка и примеры есть
#23 by PaulBC
Web-сервис мерлиона не работает нормально через WSПрокси. Работает через MSSOAP.SoapClient30. Бери документацию и примеры с их сайта и смотри как сделано. И лучше использовать описание (стиль document/literal).
#24 by DaDe
было такое предположение. Надо будет попробовать сегодня сделать, а то у меня уже в голове все скипело. Просто хотелось сделать штатным средством, но видимо 1с не может правильно работать с данным сервисом. С другими проблем не возникло.
#25 by DaDe
Работает через MSSOAP.SoapClient30 - Это и понятно если глянуть документацию, но реализация MSSOAP.SoapClient30 как-то не очень хорошо на Srv x64 хотелось как лучше, но видимо прийдется использовать другой вариант. Там кстати документации кот наплакал, хотя впринципе достаточно. К сожалению с (стиль document/literal) нет доступа к getCatalog, хотя есть описание входных данных.
#26 by Мэс33
Вот еще маленькая программулина для тестирования веб-сервисов:
#27 by PaulBC
По поводу Srv x64, на win server 2012 R2 помогло это: С getCatalog проблем не возникало.
#28 by DaDe
Дак, проблема не в сервисе, ведь другое ПО с ним работает нормально. Проблема именно в 1С, ну или в соответствии конкретного wsdl стандартам 1С. Странно что Мерлион не тестировали свой сервис wsdl с 1С при написании. В нашей стране 1С используется очень часто. Спасибо, видел в просторах инета, но такой подробной нет. По поводу С getCatalog проблем не возникало. У меня он видит структура входных/выходных данных, но не одну операцию он не видит, ругается - Метод объекта не обнаружен (..)
#29 by ivant
День добрый. Пока ветка еще жива - тоже интересуюсь данным веб-сервисом и тоже есть проблема. Что встроенные средства не работают - понятно. Хотя тут пишут, что удалось исправить схему и заработало: Но я не вкуриваю как это. В общем, пользуюсь MSSOAP.SoapClient30 Пытаюсь выполнить функцию getItems. Туда надо передать два параметра - первый строковый, а второй массив (тип ArrayOfString) И что-то не получается - куда копать, что курить? Я новичек в веб-сервисах, буду признателен за помощь.
#30 by ivant
*уточнение: вопрос, как передать массив? со стороквыми параметрами все понятно
#31 by Serginio1
Почему не хочешь использовать
#32 by ivant
Я думал, что в одном шаге от победы. А в мне еще пилить и пилить. Куда хоть копать с этим массивом? Как его правильно создать и передать?
#33 by Serginio1
в 22 в отличие от MSSOAP.SoapClient30 все сериализуется десериализуется автоматически.
#34 by ivant
добрый день. по ссылке я скачал архив с файлами - вопрос, как это использовать? есть какая-нибудь инструкция? почитал статьи и вложенную документацию, но как начать, так и не нашел. Что нужно сделать, чтобы можно было начать работать с вебсирвисами? метод научного тыка не помогает(
#35 by ivant
что я нашел сам - пример кода вижу тут: но непонятно что нуужно сделать ДО. установить Net? Какой лучше версии? Что еще? в папке нашел исполняемый файл "РегистрацияКомСервера" - это нужно использовать? Тоже не понял как. Что-нибудь еще?
#36 by Serginio1
Там есть пример использования Вэб сервиса. Нужно скомпилировать библиотеку клиента WCF
#37 by Serginio1
Почитай всю ветку. Там человек незнакомый с .Net со всем разобрался
#38 by Serginio1
Плюс наверняка есть примеры на C# которые легко перенести на 1С
#39 by PaulBC
В SoapClient в качестве массива передается COMSafeArray: где КодыТовара - массив строк. Для передачи пустого значение создается массив из одного элемента - пустой строки.
#40 by ivant
так: вываливается ошибка: {}: Ошибка при вызове метода контекста (getItems) ТекРезультат = Клиент.getItems("N10100", ИДТовара) по причине: Произошла исключительная ситуация (Client): Client:Incorrect number of parameters supplied for SOAP request HRESULT=0x80070057: Параметр задан неверно. - Client:Unspecified client error. HRESULT=0x80070057: Параметр задан неверно.
#41 by Serginio1
Как кактус на вкус?
#42 by ivant
я думаю, что я "сам дурак" - опять что-то не так делаю, это раз. А второе - по вашему методу я буду разбираться - вариантов-то не много. Но на это нужно время, а время будет на праздниках только - пока его нет.
#43 by ivant
вот кстати, пример на пхп: тут они все параметры какой-то структурой передают, а не через запятую - может в этом дело
#44 by ivant
о, разобрался! просто оказывается надо было необязательные параметры тоже передавать огромное спасибо! :)
#45 by Serginio1
Посмотрел проблемы с этим сервисом не только в 1С Если вышлешь логин пароль то попробую тебе помочь. Часто если сервисы на PHP используются не по стандарту. Можешь с помощью Fiddler Получить ответ и отправить в службу поддержки
#46 by Serginio1
Для проведения тестов нужно распаковать архив . Татем нужно  зарегистрировать Нужные DLL. Запускаем РегистрацияКомСервера.exe и выбираем NetObjetToIDispatch45.dll которая лежит в DLLNetObjetToIDispatch45 Затем запускаем толстого клиента и ТестNetObjectToIDispatch.epf
#47 by Serginio1
Что бы использовать сборку Файл->Новый проект->Библиотека классов (DLL) Проэкт тобавить существующий элемент выбираем описание.
#48 by Serginio1
К сожалению та же ошибка как и здесь
#49 by Serginio1
ают они до 9 го
#50 by Serginio1
Нет заработало на (стиль rpc/literal) Сейчас сделаю сборку и пример на 1С
#51 by Serginio1
Хотя может и на 1С пройдет
#52 by Serginio1
Здесь лежит отчет внутри DLL
#53 by Serginio1
Вот весь код &НаКлиенте
#54 by Serginio1
Нет на getItems валится Невозможно преобразовать объект типа "CatalogResult[]" к типу "ItemsResult[]".
#55 by Serginio1
Пока не забанили. Повозился ннемного с этим сервисом. Проблема в том, что wcf почему то любой массив определяет как CatalogResult[] В принципе можно вручную десериализовать public  class CustomProxyFormatter : IClientMessageFormatter     {     public    IClientMessageFormatter original;         public CustomProxyFormatter(IClientMessageFormatter actual)         {         public Message SerializeRequest(MessageVersion messageVersion, object[] parameters)         {         public object DeserializeReply(Message message, object[] parameters)         {     }     public class CustomOperationFormatterBehavior : IOperationBehavior     {         public void AddBindingParameters(OperationDescription operationDescription, BindingParameterCollection bindingParameters)         {                }         public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation)         {                  }         public void Validate(OperationDescription operationDescription)         {                    }         void IOperationBehavior.ApplyClientBehavior(OperationDescription description, ClientOperation proxy)         { и воткнуться в Такое решение будет работать и в 8 ке и в 7 ке. Можно предложить это сделать мерлионовцам     }
#56 by DaDe
Че-то не совсем понял о чем речь.
#57 by Garykom
предлагается C# и .Net учить...
#58 by DaDe
Дельное замечание )
#59 by Serginio1
Предлагается мерлионовцам  сделать всем хорошо. С 53 не было проблем без знания .Net?
#60 by Serginio1
59+ В принципе и я могу, только пока у меня другие дела.
#61 by DaDe
Вопрос изначально был задан мной не совсем корректно. Я не совсем понял, что конкретно Мерлион смогут сделать, что им предложить? Вот в чем вопрос был. Я прекрасно понимаю, что без знания С# и DotNet мне как бы в эту кашу не залезть за неделю и я не предлагаю чтобы кто-то за меня все сделал.
#62 by Garykom
даже маня через свой soap сделать, а не через 1С-ный
#63 by DaDe
Видел описание данного творения. Они походу с помощью python выкрутились. Для меня так и осталась загадкой почему они не сделали формат в котором бы 1С читала бы. Ведь другие дистрибы сделали свои системы в совместимом формате. Хотя это понятно, что им виднее, куда им до нас, простых работяг. Пускай типа контора вкладывает десятки тысяч и заказываю подобное ПО.
#64 by Serginio1
Вот видишь всего 25 тыр. Прописать десериализацию через автогенерацию ну часа 2 на все массивы.  А еще проще обратиться в службу поддержки MS. Но проще заплатить.
#65 by Serginio1
Я так понимаю, что это ттворение на Java. И примеры у них только на PHP
#66 by Serginio1
Если вместо ссылки на службу, сделать веб ссылку использующую технологию веб служб .Net FrameWork 2.0
#67 by Serginio1
var client = new WpfApplication1.com.merlion.apitest.MLService;             var myCredentials = new System.Net.NetworkCredential(Логин, Пароль);
#68 by Serginio1
Сегодня 52 годика, да и приболел. Выложу позже
#69 by Garykom
неужто День Варенья? и поправки здоровья успешной а то без адептов дотнета некому будет его продвигать
#70 by Serginio1
Спасибо! Я адепт программирования. Просто с .Net удобнее многие задачи решать. Мне все равно на чем программировать. Было время на мобильнике использовал C#, Tcp/Ip сервер на Delphi и клиент на 1С. Очень было прикольно переходить с одного языка на другой. Зная 1 язык, второй изучается намного проще. Ну и конечно нужен опыт и постоянная поддержка себя в форме. В том числе и с помощью физкультуры
#71 by Serginio1
Выложил рабочий вариает
#72 by DaDe
Прими мои искренние поздравления и выздоравливай, а то как мы тут без тебя ;-) Походу сейчас все больше и больше с использование dotNet пишется. Походи придётся заняться изучением. Спасибо.
#73 by Serginio1
Спасибо! И на здоровье
#74 by Serginio1
Да нужно добавить client.PreAuthenticate = true; что бы при каждом вызове добавлялся Authorization: Basic Без него сначала вызов идет без Authorization: Basic получив код 401 добавляет его &НаКлиенте
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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