Имя: Пароль:
1C
1С v8
Не вызывается метод из 1с на веб-сервисе SOAP
,
0 zenaXXX
 
12.02.13
14:02
Помогите пожалуйста, не могу разобраться.
Есть веб сервис сторонний, подключаюсь к нему через 1с

Определения = Новый WSОпределения("ПутьКМоемуСервису?wsdl");

WSСервис = Определения.Сервисы[0];

Proxy = Новый WSПрокси(Определения, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ИмяТочкиПодключения[0].Имя);    

Proxy.addComment("tasks",45578,"Тест","ACCOUNTING","");    

на последней строчке выдает ошибку:
{Форма.Форма.Форма(8)}: Метод объекта не обнаружен (addComment)
Proxy.addComment("tasks",45578,"Тест","ACCOUNTING","");    
В чем может быть дело. Из других систем этот метод работает
1 Serginio1
 
12.02.13
14:22
ИмяВэбСервиса=ТвоёИмя;//



   ИмяТочкиПодключения=ИмяВэбСервиса+"Soap";
   
    АдресВэбСервиса="http://ИмяСервера/ИмяБазы/ws/"+ИмяВэбСервиса;



   Определения= новый WSОпределения(АдресВэбСервиса+"?wsdl",Юзер,Пароль);
   Прокси= Новый WSПрокси(Определения,URiПространстваИмен,ИмяВэбСервиса,ИмяТочкиПодключения);
   
    Прокси.Пользователь = Юзер;
   Прокси.Пароль = пароль;
2 Serginio1
 
12.02.13
14:26
Прошу прощения. Это к 1С. Для сторонних может быть не так.
Хотя кроме АдресВэбСервиса должно быть одинаково. Смотри в отладчике
3 sapphire
 
12.02.13
14:29
(0) wsdl?
4 zenaXXX
 
12.02.13
14:29
В отладчике у меня есть только одна точка подключения, ее я и прописываю в Новый WSПрокси(), если вызываю с окончанием soap, она ругается что порт не найден
5 zenaXXX
 
12.02.13
14:30
Пробовала и "ПутьКМоемуСервису?wsdl" и "ПутьКМоемуСервису разницы нет
6 sapphire
 
12.02.13
14:30
(0) Проверь имя метода по wsdl
7 Asmody
 
12.02.13
14:31
создай в пустой конфе WSСсылку, закинь в нее свой wsdl и посмотри, какие методы 1Ска распознает
8 sapphire
 
12.02.13
14:31
(5) Если подумать, то ПутьКМоемуСервису?wsdl забив в браузер ты увидишь описание web-сервиса....
9 sapphire
 
12.02.13
14:32
(0) web-сервисы чувствительны к регистру букв.
10 zenaXXX
 
12.02.13
14:33
создай в пустой конфе WSСсылку, закинь в нее свой wsdl и посмотри, какие методы 1Ска распознает
Она ругается, что формат неверен, в каком формате нужно указывать url
11 Asmody
 
12.02.13
14:34
(10) а в браузере открывается?
12 zenaXXX
 
12.02.13
14:34
Путь у меня ПутьКМоемуСервису.xml?wsdl
13 zenaXXX
 
12.02.13
14:34
открывается в xml формате
14 Asmody
 
12.02.13
14:35
так и прописывй http://serv.er/path/to/ws/ws.xml?wsdl
15 sapphire
 
12.02.13
14:36
(12) в формате URI
16 sapphire
 
12.02.13
14:36
Есть веб сервис сторонний - как правило, в виде URI...
17 zenaXXX
 
12.02.13
14:38
Пишет что неверный формат, может нужно каку-нибудь библитеку подгрузить?
18 sapphire
 
12.02.13
14:39
(17) :)))))))))))))))))))))))))))))))))))))))))))
19 sapphire
 
12.02.13
14:40
(17) адрес сервера секретный такой что ли?
20 zenaXXX
 
12.02.13
14:40
ага
21 Asmody
 
12.02.13
14:40
(17) значит не судьба с этим сервисом из 1Ски поработать.
SOAP он такой SOAP, слишком вольно местами трактуемый
22 sapphire
 
12.02.13
14:41
(17) Адрес стороннего web-сервиса какой?
23 sapphire
 
12.02.13
14:41
(21) Не факт, Вить
24 sapphire
 
12.02.13
14:42
(20) Да не нужен мне твой сервант, сама проверь, открывается ли в браузере wsdl-ка
25 sapphire
 
12.02.13
14:42
(21) Если там еще и https то вообще песня :)
26 zenaXXX
 
12.02.13
14:43
открывая ПутьКМоемуСервису.xml?wsdl я получаю тоже что и когда пишу ПутьКМоемуСервису.xml
27 sapphire
 
12.02.13
14:43
(21) использовать платформу 8.3 в качестве ws2ws-proxy :)))
28 Balonbl4
 
12.02.13
14:44
ТС, у меня была схожая ситуация, вот статья с моими изысканиями: http://infostart.ru/public/161726/
29 sapphire
 
12.02.13
14:44
(26) И что получаешь? *уже просто интересно*
30 zenaXXX
 
12.02.13
14:44
не могу использовать 8.3
31 Balonbl4
 
12.02.13
14:45
(27) В моем случае это не помогло(сторонний веб сервис был на Oracle Fusion Middlewere)
32 sapphire
 
12.02.13
14:48
(31) без разницы. Можно использовать любое MQ с поддержкой SOAP в качестве ws2ws-proxy
33 sapphire
 
12.02.13
14:49
(30) Ну не можешь и не можешь.
Короче, ты описание сервиса через обычный браузер видишь?
34 Balonbl4
 
12.02.13
14:51
(32) Можно поподробнее?
35 zenaXXX
 
12.02.13
14:53
я вижу его в формате xml
36 sapphire
 
12.02.13
14:54
(35) Ищи метод addComment и смотри что он должен получить.
37 zenaXXX
 
12.02.13
14:55
<part name="type" type="xsd:string"/><part name="id" type="xsd:int"/><part name="comment" type="xsd:string"/><part name="user" type="xsd:string"/><part name="attachments" type="soap-enc:Array"/>
38 sapphire
 
12.02.13
14:55
(34) MQ = Message Queue, например, RabbitMQ
39 zenaXXX
 
12.02.13
14:56
это параметры метода addcomment
40 sapphire
 
12.02.13
14:56
(37) Метод в том пространстве имен?
41 sapphire
 
12.02.13
14:57
>>Из других систем этот метод работает
Из каких других, 1С или что-то иное?
42 zenaXXX
 
12.02.13
14:58
что-то иное, код на perl
43 sapphire
 
12.02.13
15:16
(42) на той же машине, что и сервер 1С? :)
44 zenaXXX
 
12.02.13
15:17
нет
45 zenaXXX
 
12.02.13
15:17
на другой машине
46 sapphire
 
12.02.13
15:18
(39) ты с регистром имя метода точно не путаешься, дело в том, что метод addcomment из (39) и addComment из (0) с точки зрения SOAP - разные
47 sapphire
 
12.02.13
15:18
(42) на perl имя метода как звучит?
48 zenaXXX
 
12.02.13
15:19
на perl они вызывают
my $obj = $soap->addComment( $tw_type, $tw_id, $tw_comment, $tw_user, $tw_attachments );
49 sapphire
 
12.02.13
15:19
(45) у сервиса есть эхо-метод?
50 sapphire
 
12.02.13
15:24
(48) в (0) скорее всего ошибка.
в perl пространство имен и прочее статично или дергает из определения?
51 zenaXXX
 
12.02.13
15:24
(49) что за эхо-метод?
52 sapphire
 
12.02.13
15:25
(51) обычно метод echo реализуют у сервисов для диагностики связи.
53 Serginio1
 
12.02.13
15:34
(0) Можешь создать класс на Net для подключения вэб сервиса
а затем через вот этот прокиси v8: Объекты Net в IDispatch
подключить его как ком
54 sapphire
 
12.02.13
15:35
+ в (0) передача параметров неправильная согласно (37):
xml_type_string=ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema","string");
xml_type_int= ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema","int");

parameter_type=ФабрикаXDTO.Создать(xml_type_string,"tasks");
и. т. п.
55 sapphire
 
12.02.13
15:37
(53) Да там в создании WSProxy косяк, ИМХО
56 Balonbl4
 
12.02.13
15:39
(54) 1ска же нормально преобразует в xml примитивные типы, мне кажется, это излишество
57 zenaXXX
 
12.02.13
15:42
с фабрикой я тоже пробовала, но проблема именно в том что 1с-ка не видит этот метод
58 sapphire
 
12.02.13
15:52
(57) Проблема в создании WSProxy
59 sapphire
 
12.02.13
15:53
(57) на (50) ответь
60 zenaXXX
 
12.02.13
15:55
(59) Точно сказать не могу
61 sapphire
 
12.02.13
15:56
(60) Причина? Ты не знаешь статично оно в perl или динамично?
62 zenaXXX
 
12.02.13
15:57
я не вижу весь код
63 zenaXXX
 
12.02.13
15:57
мне дали только пример
64 Asmody
 
12.02.13
15:58
проблема в том, что wsdl скорее всего не соответствует спецификации. из-за чего 1Ска не может преобразовать его в XTDO.
65 sapphire
 
12.02.13
15:59
(64) ИМХО, там она просто из другого пространства имен цепляет.
66 sapphire
 
12.02.13
16:00
(64) врядли
67 sapphire
 
12.02.13
16:02
(64) Меня вот это смущает:
WSСервис = Определения.Сервисы[0];

Proxy = Новый WSПрокси(Определения, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ИмяТочкиПодключения[0].Имя);
68 zenaXXX
 
12.02.13
16:02
что именно (67)
69 sapphire
 
12.02.13
16:02
(64) Для сложных и included type есть такая фича
70 sapphire
 
12.02.13
16:03
(68) URIПространстваИмен и прочее точно соответсвует определению?
71 sapphire
 
12.02.13
16:03
(68) сервис на закрытом порту?
72 sapphire
 
12.02.13
16:04
а то играем в "Угадай мелодию"....
73 Serginio1
 
12.02.13
16:12
(56) Для anyType нужно явное создание типа. Но в данном случае ругается на метод. Если же в (10) она WS ссылку не может загрузить, то возможно, что 1С не понимает. Если бы была ссыдка можно было бы проверить
74 zenaXXX
 
12.02.13
16:13
(71) как это можно проверить
75 zenaXXX
 
12.02.13
17:20
(70) <definitions name="Определение" targetNamespace="URIПространстваИмен">
<types><xsd:schema targetNamespace="URIПространстваИмен"/></types>
<portType name="WSСервис.ИмяТочкиПодключения"><operation name="addComment"><documentation>яяя</documentation><input message="tns:addCommentIn"/></operation>
</portType>
<binding name="Binding" type="tns:WSСервис.ИмяТочкиПодключения"><soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/><operation name="addComment"></operation></binding>
<service name="Сервис"><port name="WSСервис.ИмяТочкиПодключения" binding="tns:Binding"><soap:address location="URIПространстваИмен"/></port></service><message name="addCommentIn"><part name="type" type="xsd:string"/><part name="id" type="xsd:int"/><part name="comment" type="xsd:string"/><part name="user" type="xsd:string"/><part name="attachments" type="soap-enc:Array"/></message>

Что типа этого, в чем может быть ошибка
76 zenaXXX
 
12.02.13
17:29
и закрывается все </definitions>
77 fisher
 
12.02.13
17:33
Я давно разочаровался в 1с-овском SOAP. Сплошь и рядом продвинутые веб-сервисы юзают SOAP шире, чем его поддерживает 1С. В итоге 1С их "не понимает".
78 zenaXXX
 
13.02.13
09:10
Помогите, очень надо
79 Balonbl4
 
13.02.13
09:42
(78) Вы статью читали, ссылку на которую я давал в самом начале? Делайте как там.
80 На стороне добра
 
13.02.13
10:48
Сохрани WSDL-описание в xml-файл, и загрузи WSссылку, если будет ошибка "неверный формат", значит надо редактировать xml. Я так раздел за разделом отлаживал. Еще проверь веб-сервис на валидность, можно через сайт http://www.validwsdl.com/
81 fisher
 
13.02.13
11:06
(79) Хорошая идея.
(80) Я тоже как-то было так отлаживал. Избавлял от циклических ссылок в пространствах имен (1С этого не переваривает). Думал, что победа близка. wsdl успешно загрузился. А потом выяснилось, что сервис использует хитрый способ авторизации через установку каких-то заголовков (подробности уже плохо помню), а 1С эту фигню не поддерживает.
Было очень обидно.
82 zenaXXX
 
13.02.13
13:12
файл сохранила, пишет что неверный формат, можно ли какой-нибудь прогой его проверить. Сайт не подходит http://www.validwsdl.com/
83 zenaXXX
 
14.02.13
09:04
Может кто знает, что может не нравиться в wsdl 1с, почему она может писать неверный формат?
84 zenaXXX
 
14.02.13
09:04
и что такое  циклические ссылки в пространствах имен
85 Asmody
 
14.02.13
09:23
(82) SoapUI тебе в помощь.
(83) невалидный wsdl
86 zenaXXX
 
14.02.13
09:26
wsdl валидный, я отправляла запрос с помощью soap-клиента, все нормально отрабатывает
87 zenaXXX
 
14.02.13
09:26
дело именно в 1с, ей что-то не нравиться(
88 На стороне добра
 
14.02.13
10:03
Скинь wsdl сюда
89 zenaXXX
 
14.02.13
15:42
Нашла))))) Может кому поможет:
ошибка была в том что в узле
<portType name="WSСервис.ИмяТочкиПодключения"><operation name="Com"><documentation>яяя</documentation><input message="tns:addCommentIn"/></operation>  не было выходного
<output message="tns:addCommentIn"/>
и в самом начале было просто <?xml version='1.0'?>, я поставила
<?xml version='1.0' encoding='UTF-8'?>