|   |   | 
| 
 | Не загружается описание внешнего Вэб сервис только в 1с | ☑ | ||
|---|---|---|---|---|
| 0
    
        DArkJon 07.11.13✎ 16:39 | 
        1С:Предприятие 8.2 (8.2.16.363) УПП
 При добавлении через WS-ссылка http://80.250.84.156:7791/Sphaera.EmergencyCard.Interchange.Service/?wsdl (написан на .NET) Выдается "Ошибка работы с Интернет: Ошибка доступа к ресурсу. Путь не найден: (400)." Если опрашивать программно та же ошибка! Гугл не помог! Пробовал другие Вэб сервисы, все работает на ура http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL С этой же машины пробовал получить описание через SoapUI 4.6.1 все получает! Доступ в нет полнее не бывает на прямую без прокси! Возможно ли что причина не доменное имя? Может есть какая специфика для работы вэб сервиса и 1с? | |||
| 1
    
        Serginio1 07.11.13✎ 17:07 | 
        Сохрани страницу в файл и загрузи этот файл.
 либо ОпределениеТ=Новый WSОпределения(ИмяФайла_wsdl"); WSСервис=ОпределениеТ.Сервисы[0]; прокси=Новый WSПрокси(ОпределениеТ, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя); | |||
| 2
    
        sapphire 07.11.13✎ 17:09 | 
        (0) Порт нестандартный     | |||
| 3
    
        Serginio1 07.11.13✎ 17:10 | 
        Вообще то она ругается на эту запись 
 <xsd:import namespace="http://tempuri.org/" schemaLocation="http://80.250.84.156:7791/Sphaera.EmergencyCard.Interchange.Service/?xsd=xsd0"/> | |||
| 4
    
        Serginio1 07.11.13✎ 17:14 | 
        Видно у 1С проблемы с портом     | |||
| 5
    
        DArkJon 07.11.13✎ 17:20 | 
        Большое спасибо ото уже мысли кончились)     | |||
| 6
    
        DArkJon 08.11.13✎ 13:49 | 
        Переделали вэб сервис на стандартный порт! http://80.250.84.156/Sphaera.EmergencyCard.VrnGas.Interchange.Service/?wsdl
 Ругается 1с на строчку внутри, Какие могут быть причины? http://80.250.84.156/Sphaera.EmergencyCard.VrnGas.Interchange.Service?xsd=xsd0 | |||
| 7
    
        Serginio1 08.11.13✎ 14:07 | 
        (6) А ты её через браузер попробуй открыть? Это схема xsd.     | |||
| 8
    
        Serginio1 08.11.13✎ 14:10 | 
        Внутри ссылка на http://80.250.84.156/Sphaera.EmergencyCard.VrnGas.Interchange.Service/?xsd=xsd0
 прекрасно открвается | |||
| 9
    
        DArkJon 08.11.13✎ 14:11 | 
        http://80.250.84.156/Sphaera.EmergencyCard.VrnGas.Interchange.Service/?xsd=xsd0 так открывается как в wsdl описании, а выдает 1с именно ругается на ошибку!     | |||
| 10
    
        DArkJon 08.11.13✎ 14:13 | 
        да я заметил но почему 1с убирает слешь     | |||
| 11
    
        Serginio1 08.11.13✎ 14:15 | 
        Так сейчас и http://80.250.84.156/Sphaera.EmergencyCard.VrnGas.Interchange.Service/?wsdl не работает.     | |||
| 12
    
        DArkJon 08.11.13✎ 14:20 | 
        Упал(   Сейчас будем исправлять!     | |||
| 13
    
        DArkJon 12.11.13✎ 15:21 | 
        Разобрались это была проблема со стороны веб сервиса надо было удалить хвостовой пробел! но дальше вылезла другая проблема что передавать??? при попытке отправить из 1с на веб сервис данные и получить от него карточку ответа!
 http://80.250.84.156/Sphaera.EmergencyCard.VrnGas.Interchange.Service?wsdl Ссылка = WSСсылки.ECard; Определение = Ссылка.ПолучитьWSОпределения(); Прокси = Ссылка.СоздатьWSПрокси("http://tempuri.org/", "ECard", "BasicHttpBinding_IEmergencyCard"); Попытка Результат = Прокси.UpdateCase("?"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; | |||
| 14
    
        Serginio1 12.11.13✎ 15:35 | 
        И что за ошибка?     | |||
| 15
    
        Serginio1 12.11.13✎ 15:45 | 
        посмотри на тип параметра EmergencyCaseInfo (http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard)
 Фабрика=Прокси.ФабрикаXDTO; типПарам=Фабрика.Тип("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","EmergencyCaseInfo"); Парам=Фабрика.Создать(типПарам); Парам.Info="?"; И прочие свойства | |||
| 16
    
        Serginio1 12.11.13✎ 16:52 | 
        Вообще поставь фидлер и смотри что реально возвращает запрос
 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode><faultstring xml:lang="ru-RU">Value cannot be null.
 Parameter name: key</faultstring><detail><ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><HelpLink i:nil="true"/><InnerException i:nil="true"/><Message>Value cannot be null.
 Parameter name: key</Message><StackTrace> at System.Collections.Concurrent.ConcurrentDictionary`2.ContainsKey(TKey key)
 at Sphaera.EmergencyCard.Interchange.Service.ECard.UpdateCase(EmergencyCaseInfo info) in C:\Projects\Sphaera.ECard.Interchange\EmergencyCardInterchange.cs:line 402
 at SyncInvokeUpdateCase(Object , Object[] , Object[] )
 at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
 at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
 at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
 at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
 at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
 at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
 at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
 at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
 at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
 at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
 at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace><Type>System.ArgumentNullException</Type></ExceptionDetail></detail></s:Fault></s:Body></s:Envelope> | |||
| 17
    
        DArkJon 13.11.13✎ 17:14 | 
        Я не такой опытный с работой с сервисами и их отладкой поэтому так и не разобрался что именно передавать!
 Так и пишет Несоответствие типов. Параметр номер "1"! Ссылка = WSСсылки.ECard; Определение = Ссылка.ПолучитьWSОпределения(); Прокси = Ссылка.СоздатьWSПрокси("http://tempuri.org/", "ECard", "BasicHttpBinding_IEmergencyCard"); Фабрика=Прокси.ФабрикаXDTO; типПарам=Фабрика.Тип("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","EmergencyCaseInfo"); Парам=Фабрика.Создать(типПарам); Парам.cardId = Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema","string"), "Test"); Парам.CallTime = Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema","dateTime"),ТекущаяДата()); Парам.externalCardId = Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema","string"),Объект.Номер); Парам.info = Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema","string"), Объект.Информация); Парам.caller = Фабрика.Создать(Фабрика.Тип("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","Caller")); Парам.caller.phoneNumber = Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema","string"), Объект.ЗаявительТелефон); Парам.caller.language = Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema","string"), "RU_ru"); Парам.caller.midleName = Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema","string"), ""); Парам.caller.firstName = Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema","string"), объект.Заявитель); Парам.caller.lastName = Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema","string"), ""); Результат = Прокси.UpdateCase(Парам); | |||
| 18
    
        Serginio1 13.11.13✎ 17:18 | 
        Фабрика=Прокси.ФабрикаXDTO;
 типПарам=Фабрика.Тип("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","EmergencyCaseInfo"); Парам=Фабрика.Создать(типПарам); Парам.Info="?"; Парам.callTime=ТекущаяДата(); Результат = Прокси.UpdateCase(Парам); выдает ошибку из 16 Ошибка SOAP сервера: Value cannot be null. Parameter name: key | |||
| 19
    
        Serginio1 13.11.13✎ 17:21 | 
        Ты строки даты числа можешь и без типа создавать. Их нужно создавать когда тип параметра является anyType.     | |||
| 20
    
        Serginio1 13.11.13✎ 17:25 | 
        ОпределениеТ=Новый WSОпределения("http://80.250.84.156/Sphaera.EmergencyCard.VrnGas.Interchange.Service?wsdl");
 WSСервис=ОпределениеТ.Сервисы[0]; прокси=Новый WSПрокси(ОпределениеТ, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя); Фабрика=Прокси.ФабрикаXDTO; типПарам=Фабрика.Тип("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","EmergencyCaseInfo"); Парам=Фабрика.Создать(типПарам); Парам.Info="?"; Парам.callTime=ТекущаяДата(); Результат = Прокси.UpdateCase(Парам); | |||
| 21
    
        0wl 14.11.13✎ 02:15 | 
        Я все поля передаваемого параметра заполнил -- всё равно ему какого-то ключа для счастья не хватает.
 Надо пытать создателя сервиса (желательно с паяльником), что за ключ ему нужен в 402 строке его кода. А то это всё в какое-то неинтересное гадание превращается | |||
| 22
    
        DArkJon 14.11.13✎ 09:07 | 
        Большое спасибо всем, все получилось ключем оказались вложенные обязательные для заполнения параметры:
 Парам.caller = Фабрика.Создать(Фабрика.Тип("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","Caller";)); Парам.caller.phoneNumber = Объект.ЗаявительТелефон); Парам.caller.language = "RU_ru"); | |||
| 23
    
        DArkJon 14.11.13✎ 12:07 | 
        Появился еще вопрос! можно ли программно в 1с указать адрес прокси и порт и через него уже стучаться на веб сервис? c inetcfg.xml файлом у меня получилось но меня интересует программно?
 Ссылка = WSСсылки.ECard; Определение = Ссылка.ПолучитьWSОпределения(); Прокси = Ссылка.СоздатьWSПрокси("http://tempuri.org/", "ECard", "BasicHttpBinding_IEmergencyCard"); | |||
| 24
    
        Serginio1 14.11.13✎ 12:21 | 
        (23) в 8.3 есть конструктор
 Синтаксис: Новый WSПрокси(<Определение>, <URIПространстваИменСервиса>, <ИмяСервиса>, <ИмяТочкиПодключения>, <ИнтернетПрокси>, <Таймаут>, <ЗащищенноеСоединение>) Параметры: Тип: ИнтернетПрокси. Содержит объект ИнтернетПрокси для осуществления HTTP-соединения с веб-сервисом объектом WSПрокси, Если не указан, то используются настройки прокси по умолчанию. Значение по умолчанию: Неопределено. | |||
| 25
    
        DArkJon 14.11.13✎ 12:52 | 
        спасибо как то пропустил это хотя смотрел     | |||
| 26
    
        DArkJon 14.11.13✎ 13:04 | 
        как раз и платформу обновлю)     | |||
| 27
    
        DArkJon 14.11.13✎ 16:11 | 
        подскажите еще как в массив добавить параметры??Парам.answers = Фабрика.Создать(Фабрика.Тип("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","ArrayOfAnswer"));
 answer = Фабрика.Тип("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","Answer"); Для каждого стр из answer.Свойства Цикл стр = "test"; Парам.answers.Добавить(стр); КонецЦикла; | |||
| 28
    
        Serginio1 14.11.13✎ 16:18 | 
        стр=Фабрика.Создать(answer);
 Стр.answer="траляля"; Стр.questionCode="Трулюлю"; Парам.answers.answer.Добавить(стр); | |||
| 29
    
        Serginio1 14.11.13✎ 16:22 | 
        или для AnyRef
 Парам.answers.Добавить(ФормаXML.Элемент, "http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","Answer",ЗначениеАтрибута); | |||
| 30
    
        DArkJon 14.11.13✎ 16:26 | 
        Еще раз вам спасибо!     | |||
| 31
    
        DArkJon 18.11.13✎ 21:39 | 
        Еще раз помогите не могу справиться, что делать с фасетом?((
 http://80.250.84.156/Sphaera.EmergencyCard.VrnGas.Interchange.Service?wsdl Парам.reaction = Фабрика.Создать(Фабрика.Тип("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","ArrayOfReaction")); Reaction = Фабрика.Тип("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","Reaction"); Стр=Фабрика.Создать(Reaction); serviceType = Фабрика.Тип("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","ServiceType"); СервисТип=Фабрика.Создать(serviceType); что делать с ServiceType и EventType??? | |||
| 32
    
        Serginio1 19.11.13✎ 10:10 | 
        Что то типа такого Пакет=Фабрика.Пакеты.Получить("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard");
 ServiceType=Пакет.КорневыеСвойства.Получить("ServiceType"); Значение=ServiceType.Тип.Фасеты.Перечисления.Получить("Police"); Значение=ServiceType.Тип.Фасеты.Перечисления[0]; | |||
| 33
    
        Serginio1 19.11.13✎ 10:14 | 
        Смотри в отладчике     | |||
| 34
    
        Serginio1 19.11.13✎ 10:30 | 
        Или сделай функцию
 Функция НайтиПеречисление(Перечисления,Значение) Для каждого стр Из Перечисления Цикл Если стр.Значение=Значение Тогда возврат стр КонецЕсли; КонецЦикла; возврат Неопределено КонецФункции и вызов Значение=НайтиПеречисление(ServiceType.Тип.Фасеты.Перечисления,"Police"); | |||
| 35
    
        Serginio1 19.11.13✎ 10:34 | 
        Или можно без включения перечисления
 Значение=НайтиПеречисление(ServiceType.Тип.Фасеты,"Police"); | |||
| 36
    
        DArkJon 19.11.13✎ 12:56 | 
        Пакет=Фабрика.Пакеты.Получить("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard");
 ServiceType=Пакет.КорневыеСвойства.Получить("ServiceType"); СервисТип=ServiceType.Тип.Фасеты.Перечисления[5]; Стр.serviceType = Фабрика.Создать(Фабрика.Тип("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","ServiceType"), СервисТип); Ошибка отображения типов: Отображение типа 'ФасетXDTO' в тип '{http://www.w3.org/2001/XMLSchema}string | |||
| 37
    
        DArkJon 19.11.13✎ 13:29 | 
        если передавать строкой веб сервис не кушает!     | |||
| 38
    
        DArkJon 19.11.13✎ 13:50 | 
        везде пишет либо не соответствие типов либо верхнюю ошибку     | |||
| 39
    
        Serginio1 19.11.13✎ 14:18 | 
        (38) Значение=НайтиПеречисление(ServiceType.Тип.Фасеты.Перечисления,"Police");
 уже является нужным фасетом | |||
| 40
    
        DArkJon 19.11.13✎ 14:27 | 
        Парам.reaction = Фабрика.Создать(Фабрика.Тип("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","ArrayOfReaction"));
 Reaction = Фабрика.Тип("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","Reaction"); Стр=Фабрика.Создать(Reaction); Пакет=Фабрика.Пакеты.Получить("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard"); СервисТип=Пакет.КорневыеСвойства.Получить("ServiceType"); Значение=НайтиПеречисление(СервисТип.Тип.Фасеты.Перечисления,"GasService"); //Значение=СервисТип.Тип.Фасеты.Перечисления[5]; //Стр.serviceType = Фабрика.Создать(Фабрика.Тип("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","ServiceType"),Значение); //Стр.serviceType = Фабрика.Создать(СервисТип,Значение); Стр.serviceType = Значение; //Стр.serviceType = ""+Значение; //Стр.serviceType.Добавить(Значение); //стр.serviceType.Добавить(ФормаXML.Элемент,"http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","ServiceType",Значение); Ошибка отображения типов: Отображение типа 'ФасетXDTO' в тип '{http://www.w3.org/2001/XMLSchema}string' | |||
| 41
    
        Serginio1 19.11.13✎ 14:42 | 
        Стр.serviceType = Значение.Значение;     | |||
| 42
    
        Serginio1 19.11.13✎ 14:43 | 
        По сути должно проходить
 Стр.serviceType="GasService"; | |||
| 43
    
        DArkJon 19.11.13✎ 15:17 | 
        Стр.serviceType = Значение.Значение; так прокатило но веб сервис ругается!
 Стр.serviceType="GasService"; так ругается на тип! | |||
| 44
    
        Serginio1 19.11.13✎ 15:28 | 
        Попробуй так
 ЗначениеЭлемента=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "string"),Значение.значение); Стр.Добавить(ФормаXML.Элемент, "http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard", "serviceType ",ЗначениеЭлемента); | |||
| 45
    
        Serginio1 19.11.13✎ 15:29 | 
        Или 
 Стр.serviceType=ЗначениеЭлемента; Вообще узнай как должен выглядеть XML | |||
| 46
    
        DArkJon 19.11.13✎ 16:15 | 
        http://80.250.84.156/Sphaera.EmergencyCard.VrnGas.Interchange.Service?singleWsdl я нашел описание xsd но не особо понял чем мне это поможет(     | |||
| 47
    
        Serginio1 19.11.13✎ 18:01 | 
        Фидлером посмотри какой запрос уходит например из программы на C#
 Я например сейчас на семерке использую прокладку под Net и не парюсь. | |||
| 48
    
        Serginio1 20.11.13✎ 13:42 | 
        Фабрика.Создать(serviceType,"Police")     | |||
| 49
    
        Serginio1 20.11.13✎ 13:44 | 
        То есть
 serviceType = Фабрика.Тип("http://schemas.datacontract.org/2004/07/Sphaera.EmergencyCard","ServiceType"); СервисТипЗначение=Фабрика.Создать(serviceType,"Police"); | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |