|
Ошибка 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
|
http://www.w3.org/2001/XMLSchema
См. (34) |
|||
56
efim16rus
21.07.15
✎
10:09
|
Фидлером не смотрел какой запрос 1с формирует?
|
|||
57
efim16rus
21.07.15
✎
10:11
|
Сделай как в(45)
|
|||
58
Serginio1
21.07.15
✎
11:18
|
(51) Так пространство имен и не стал переименовывать?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |