![]() |
![]() |
![]() |
|
Не загружается описание внешнего Вэб сервис только в 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"); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |