Имя: Пароль:
1C
1С v8
Не загружается описание внешнего Вэб сервис только в 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
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.&#xD;
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.&#xD;
Parameter name: key</Message><StackTrace>   at System.Collections.Concurrent.ConcurrentDictionary`2.ContainsKey(TKey key)&#xD;
   at Sphaera.EmergencyCard.Interchange.Service.ECard.UpdateCase(EmergencyCaseInfo info) in C:\Projects\Sphaera.ECard.Interchange\EmergencyCardInterchange.cs:line 402&#xD;
   at SyncInvokeUpdateCase(Object , Object[] , Object[] )&#xD;
   at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp; outputs)&#xD;
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)&#xD;
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc)&#xD;
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc&amp; rpc)&#xD;
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&amp; rpc)&#xD;
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&amp; rpc)&#xD;
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&amp; rpc)&#xD;
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&amp; rpc)&#xD;
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&amp; rpc)&#xD;
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&amp; rpc)&#xD;
   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");
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn