Имя: Пароль:
1C
 
Ошибка SOAP сервера
,
0 PsyTech
 
20.07.15
11:46
Всем привет!

При обращении к методу сервиса 1с из 1с ошибка:
"Ошибка SOAP сервера:  Неизвестная ошибка. {WebСервис.NumerationSF.Модуль(7)}: Ошибка при вызове метода контекста (ПрочитатьXDTO)
по причине:
{WebСервис.NumerationSF.Модуль(7)}: Ошибка при вызове метода контекста (ПрочитатьXDTO)
по причине:
Несоответствие типов (параметр номер '1')"

Обращаюсь вот так:
    Определения = Новый WSОпределения("ссылка на сервис");
    Прокси = Новый WSПрокси(Определения, "http://www.w3.org/2001/XMLSchema";, "NumerationSF", "NumerationSFSoap");
    
    WSПараметр = СериализаторXDTO.ЗаписатьXDTO(СтрокаXML);
    
    Ответ = Прокси.GetNumberSF(WSПараметр);

из SOAPUI тот-же запрос работает. В чем ошибка?
1 PsyTech
 
20.07.15
11:47
Прокси тут лишний
2 PsyTech
 
20.07.15
11:50
тип параметра anyType
3 Остап Сулейманович
 
20.07.15
11:51
(0) Нужно смотреть в модуле вот этого вот : "NumerationSF" в строке (7).
Скорее всего неправильно с точки зрения сервиса выглядит содержимое вот этого вот : "СтрокаXML".
4 PsyTech
 
20.07.15
11:57
(3) А при запросе из soapui этот же запрос срабатывает...
5 Остап Сулейманович
 
20.07.15
11:58
(4) Ну так сравни "СтрокаXML" в 1С и тоже самое в soapui.
6 PsyTech
 
20.07.15
12:05
(5) в soapui обертка только есть стандартно. Не мешала никогда.
почему-то на тип ругается: "Несоответствие типов (параметр номер '1')"
7 Остап Сулейманович
 
20.07.15
12:08
(6) "в soapui обертка только есть стандартно." Это как понять? Метод вызывается вообще без параметра?
8 Serginio1
 
20.07.15
12:12
Сразу несколько вопросов
NumerationSF и пространство имен http://www.w3.org/2001/XMLSchema

Если хочешь получить объект XDTO из строки то

ЧтениеXML= новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(СтрокаXML);
    ЧтениеXML.ПерейтиКСодержимому();
    WSПараметр =Прокси.Фабрика.ПрочитатьXML(ЧтениеXML,Фабрика.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));
9 Serginio1
 
20.07.15
12:13
Фабрика=Прокси.ФабрикаXDTO;
WSПараметр =Фабрика.ПрочитатьXML(ЧтениеXML,Фабрика.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));
10 PsyTech
 
20.07.15
12:23
(8) Ошибка преобразования данных XDTO:
НачалоСвойства: {http://www.w3.org/2001/XMLSchema}anyType    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
11 PsyTech
 
20.07.15
12:25
В базе сервиса тип параметра "string", а при создании ws-ссылки "anyType"
12 Serginio1
 
20.07.15
12:27
(0)
используй динамическое подключение если не знаешь какое пространство имен используешь

ОпределениеТ=Новый WSОпределения("http://домен_сайта/имя_публикации_базы/ws/имя_веб_сервиса?wsdl";);
    WSСервис=ОпределениеТ.Сервисы[0];
    ПроксиWS=Новый WSПрокси(ОпределениеТ, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя);
    
    
    ПроксиWS.Пользователь = "ХХХ";
    ПроксиWS.Пароль = "УУУУ";

    ПроксиWS.ВызватьКакойтоМетод();
13 PsyTech
 
20.07.15
12:34
Ошибка преобразования данных XDTO:
14 PsyTech
 
20.07.15
12:36
в браузере string.
Не понимаю, почему anyType у меня
15 PsyTech
 
20.07.15
12:45
(8)Ошибка преобразования данных XDTO:
НачалоСвойства: {http://www.w3.org/2001/XMLSchema}anyType    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: Body    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType
16 PsyTech
 
20.07.15
13:02
Определения = Новый WSОпределения("");
    Прокси = Новый WSПрокси(Определения, "http://www.w3.org/2001/XMLSchema";, "NumerationSF", "NumerationSFSoap");
    Фабрика=Прокси.ФабрикаXDTO;
    
    ЧтениеXML= новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(СтрокаXML);
    ЧтениеXML.ПерейтиКСодержимому();
    ТипWSПараметра = Прокси.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "string");
    
    WSПараметр =Прокси.ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипWSПараметра);        
    
    Ответ = Прокси.GetNumberSF(WSПараметр);


{Форма.Форма.Форма(67)}: Ошибка при вызове метода контекста (ПрочитатьXML)
    WSПараметр =Прокси.ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипWSПараметра);        
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: Body    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType
17 PsyTech
 
20.07.15
13:04
откуда anyType, если в браузере и в конфе сервиса string?
И что с этим делать?
18 cw014
 
20.07.15
13:13
Если string, тогда зачем ты туда пихаешь ОбъектXDTO? Пихай стринг
19 cw014
 
20.07.15
13:14
Определения = Новый WSОпределения("ссылка на сервис");
    Прокси = Новый WSПрокси(Определения, "http://www.w3.org/2001/XMLSchema";;, "NumerationSF", "NumerationSFSoap");
    
    //Это тут не нужно
    //WSПараметр = СериализаторXDTO.ЗаписатьXDTO(СтрокаXML);
    
    //Ответ = Прокси.GetNumberSF(WSПараметр);
    Ответ = Прокси.GetNumberSF(СтрокаXML);
    //Если взлетит - с тебя 500 р
20 Serginio1
 
20.07.15
13:42
(17) Внимательно посмотри на 12. И посмотри какое пространство имен у WSСервис.URIПространстваИмен
21 PsyTech
 
20.07.15
14:13
(20) WSСервис.URIПространстваИмен = "http://www.w3.org/2001/XMLSchema";
22 efim16rus
 
20.07.15
14:17
"СтрокаXML" у тебя какой тип имеет?
23 PsyTech
 
20.07.15
14:18
(19)
{Форма.Форма.Форма(103)}: Ошибка при вызове метода контекста (GetNumberSF)
    Ответ = Прокси.GetNumberSF(СтрокаXML);    
по причине:
Несоответствие типов (параметр номер '1')
24 PsyTech
 
20.07.15
14:19
(22) Строка
25 efim16rus
 
20.07.15
14:22
ТипWSПараметра = Прокси.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";;, "string");    
Парам                    = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
    ВидДокумента.Key                = "Название_параметра";
    ВидДокумента.Value                = СтрокаXML;
    ВидДокумента.ValueType            = "string";
26 efim16rus
 
20.07.15
14:22
ТипWSПараметра = Прокси.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";;;, "string");    

Парам                    = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
    Парам.Key                = "Название_параметра";
    Парам.Value                = СтрокаXML;
    Парам.ValueType            = "string";
27 efim16rus
 
20.07.15
14:23
Ответ = Прокси.GetNumberSF(Парам);
28 efim16rus
 
20.07.15
14:23
Попробуй так
29 Serginio1
 
20.07.15
14:41
Вообще то http://www.w3.org/2001/XMLSchema это стандартное пространство имен уже зашитое.
А кто задал такое имя пространства имен? Если это сервис 1С
30 Serginio1
 
20.07.15
14:46
Ты бы хоть показал описание WSDL и типы используемые GetNumberSF
31 Serginio1
 
20.07.15
14:46
Или выложи WSDL
32 PsyTech
 
20.07.15
14:49
(28) Параметр = неопределено
33 PsyTech
 
20.07.15
14:50
(30) тип 1 - string
34 PsyTech
 
20.07.15
14:52
(30) вот фрагмент описания:
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"; xmlns:soap12bind="http://schemas.xmlsoap.org/wsdl/soap12/"; xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/"; xmlns:tns="http://www.w3.org/2001/XMLSchema"; xmlns:xsd="http://www.w3.org/2001/XMLSchema"; xmlns:xsd1="http://www.w3.org/2001/XMLSchema"; name="NumerationSF" targetNamespace="http://www.w3.org/2001/XMLSchema">;
<types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xs1="http://www.w3.org/2001/XMLSchema"; targetNamespace="http://www.w3.org/2001/XMLSchema"; elementFormDefault="qualified">
<xs:element name="GetNumberSF">
<xs:complexType>
<xs:sequence>
<xs:element name="RequestXML" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
35 PsyTech
 
20.07.15
14:54
Если в 1с создать ws-ссылку -  тип у параметра будет: anyType (http://www.w3.org/2001/XMLSchema)
36 efim16rus
 
20.07.15
14:57
Скинь wsdl целиком
37 PsyTech
 
20.07.15
15:00
Вариант (0) работает, но на вход в процедуру сервиса приходит почему-то Строка, а не ОбъектXDTO. Из SOAPUI приходит ОбъектXDTO.
Как сделать, чтоб приходил ОбъектXDTO?
38 cw014
 
20.07.15
15:04
Web-Service самописный? Где находится? Есть доступ к исходникам?
39 efim16rus
 
20.07.15
15:09
СтрокаТип = WSПрокси.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema","string";);
СтрокаЗначение = WSПрокси.ФабрикаXDTO.Создать(СтрокаТип,СтрокаXML);
Ответ = WSПрокси.GetNumberSF(СтрокаЗначение);
40 efim16rus
 
20.07.15
15:13
Выдернул из обработки клиент банка. Если не поможет, скидывай wsdl целиком
41 Serginio1
 
20.07.15
15:29
Измените пространство имен у Веб сервиса
Неправильно.
targetNamespace="http://www.w3.org/2001/XMLSchema">;;
Замените на какойнибудь
http://www.ИмяВашейКомпании.ru

Ну и раз параметр строка
Ответ = Прокси.GetNumberSF(СтрокаXML);
42 PsyTech
 
20.07.15
15:34
(39) не, на входе получается Строка, а не ОбъектXDTO
43 PsyTech
 
20.07.15
15:47
(8) на входе в сервисе все равно Строка получается
44 Serginio1
 
20.07.15
15:54
(43) Еще раз задай нормальное пространство имен

Судя по описанию у тебя параметр строка.
45 Serginio1
 
20.07.15
15:55
(42) С с чем сравниваешь?
Скачай Fiddler2 и смотри им какие запросы кто отправляет
46 Serginio1
 
20.07.15
15:56
47 PsyTech
 
20.07.15
16:14
(44) а какое нормальное?
48 PsyTech
 
20.07.15
16:34
(45) В отладке сервиса - если из 1с запрос приходит - на входе Строка, из других систем - ОбъектXDTO
49 Serginio1
 
20.07.15
16:49
(47) Ну ты читай, что я тебе пишу в 41
Например http://www.ИмяВашейКомпании.ru
(48) Так, а что у тебя реально представляет параметр в сервисе?

Фабрика=Прокси.ФабрикаXDTO;
Тип=Фабрика.Тип(ПространствоИмен,НазваниеТипа);
Парам=Фабрика.Создать(Тип);
50 PsyTech
 
21.07.15
09:19
(49) Прошу прощения, немного напутал.
Если отправляю запрос из SOAPUI - на входе сервиса ОбъектXDTO и все отрабатывает без ошибки.
Если отправляю из 1С - на входе тоже ОбъектXDTO, но видимо другой и ошибка появляется при попытке прочитать ОбъектXDTO:
    Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
    СтрокаХМЛ = Сериализатор.ПрочитатьXDTO(RequestXML);
Разница в объектах:
от SOAPUI в отладке вижу просто ОбъектXDTO;
от 1с в отладке видны еще его поля, т.е. тэги xml, которую я передаю.
Видимо как-то не так отправляю?
51 PsyTech
 
21.07.15
09:20
А отправляю вот так:
    ЧтениеXML= новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(СтрокаXML);
    ЧтениеXML.ПерейтиКСодержимому();
    Определения = Новый WSОпределения("http://10.6.0.47/b83Services/ws/NumerationSF.1cws?wsdl";);
    WSПрокси    = Новый WSПрокси(Определения, "http://www.w3.org/2001/XMLSchema";, "NumerationSF", "NumerationSFSoap");    
    WSПараметр  = WSПрокси.ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, WSПрокси.ФабрикаXDTO.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));    
    
    Ответ = WSПрокси.GetNumberSF(WSПараметр);
52 PsyTech
 
21.07.15
09:35
Ваще не пойму - почему туда приходит ОбъектXDTO, а не строка?
В моей конфе в сервисы на вход приходит строка всегда, но тут платформа 8.3 (8.3.5.1186), а там 8.3 (8.3.6.1977). Может в платформе дело?
53 PsyTech
 
21.07.15
09:39
(52) Нет не в платформа, а в способе отправки.
Вопрос - почему разные ОбъектXDTO приходят от SOAPUI и от 1с?
54 efim16rus
 
21.07.15
09:48
Скорее всего у тебя URIПространстваИменСервиса не http://www.w3.org/2001/XMLSchema, а собственные. Посмотри в wsdl какие используются пространства имен.
55 PsyTech
 
21.07.15
09:57
56 efim16rus
 
21.07.15
10:09
Фидлером не смотрел какой запрос 1с формирует?
57 efim16rus
 
21.07.15
10:11
Сделай как в(45)
58 Serginio1
 
21.07.15
11:18
(51) Так пространство имен и не стал переименовывать?
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс