|
работа с WSDL | ☑ | ||
---|---|---|---|---|
0
Baloven
20.12.14
✎
05:53
|
Доброго дня,
решил себе голову заморочить и реализовать получения списка запрещенных сайтов РКН... ну это не в тему :) в общем раньше с WSDL не сталкивался: код WSDLОпределение = Новый WSОпределения("http://vigruzki.rkn.gov.ru/services/OperatorRequestTest/?wsdl");//сервер тестирования выгрузок WSDLОпределение2 = Новый WSОпределения("http://vigruzki.rkn.gov.ru/services/OperatorRequest/?wsdl");//рабочий сервер выгрузок WSDLОпределение1 = Новый WSОпределения("http://86.57.245.235/TimeTable/Service.asmx?WSDL"); //сервер для понятия (моего разумеется) механизма работы WSСервис = WSDLОпределение.Сервисы[0]; WSСервис1 = WSDLОпределение1.Сервисы[0]; WSСервис2 = WSDLОпределение2.Сервисы[0]; Proxy = Новый WSПрокси(WSDLОпределение,WSСервис.URIПространстваИмен,WSСервис.Имя,WSСервис.ТочкиПодключения[0].Имя); Proxy1 = Новый WSПрокси(WSDLОпределение1,WSСервис1.URIПространстваИмен,WSСервис1.Имя,WSСервис1.ТочкиПодключения[0].Имя); Proxy2 = Новый WSПрокси(WSDLОпределение2,WSСервис2.URIПространстваИмен,WSСервис2.Имя,WSСервис2.ТочкиПодключения[0].Имя); а1 = Proxy1.GetAirportsList("RU");// здесь все отлично - список аэропортов получаю а = Proxy.getLastDumpDateEx(); // здесь ругается на обращение к процедуре объекта как к функции (предположительно дело в том что на выходе несколько параметров а2 = Proxy2.getLastDumpDateEx(); // здесь ругается на обращение к процедуре объекта как к функции (предположительно дело в том что на выходе несколько параметров б = Proxy.getLastDumpDate(); // здесь на выходе всего 1 параметр и возможно по этому есть ответ без ошибки б2 = Proxy2.getLastDumpDate(); // здесь на выходе всего 1 параметр и возможно по этому есть ответ без ошибки Вопрос к сообществу - как с этим монстром работать - так увы и не понял... потому как в идеале хочется по 1 кнопке отправить файл XML и файл подписи на сервер (sendRequest) и потом через getResult мне нужно получить файл в ответ указав code из предыдущего запроса... проблем с формированием xmlи подписи нет - в остальном попросту нет понимания :( |
|||
1
Baloven
20.12.14
✎
05:54
|
если кто поможет документация здесь http://vigruzki.rkn.gov.ru/docs/description_for_operators_actual.pdf
|
|||
2
Эмбеддер
20.12.14
✎
06:42
|
||||
3
Baloven
20.12.14
✎
07:14
|
(2) и как это ко мне относится?
|
|||
4
Baloven
20.12.14
✎
07:19
|
(2) я не понял как вообще это использовать???? ну создам я структуру - а с какими значениями? я ж написал что понять вообще не могу почему у меня пусть даже может быть со струтурированными данными на выходе мне 1С говорит что я обращаюсь к процедуре как к функции - я даже отладчиком не вижу ответа :(
|
|||
5
Baloven
20.12.14
✎
07:25
|
(2) и опять же насколько я понимаю в той ветке - там типикстартер - ОТПРАВЛЯЕТ данные на сервер струтурированные, Вы ему подсказыли насколько я понял что нужно обратится в XDTO... у меян ситуация, что я не могу получить от сервера ответ - и не знаю структура это или нет вообще.... потому и задал вопрос
|
|||
6
Baloven
20.12.14
✎
07:31
|
(2)
даже если так прописать: а = Новый Структура; а = Proxy.getLastDumpDateEx(); все равно Обращение к процедуре объекта как к функции.... так что бредовый Ваш молчаливый совет |
|||
7
Baloven
20.12.14
✎
07:34
|
и даже так
СериализаторXDTO.ЗаписатьXDTO(Proxy2.getLastDumpDateEx()) та же самая ошибка |
|||
8
Эмбеддер
20.12.14
✎
07:38
|
почему она тебе говорит, что обращаешься к процедуре как к функции, могу только предположить, что 1С в случае возвращаемого результата с несколькими полями считает, что возвращаемого результата вообще нет
может кто-нибудь знает способ заставить работать 1С с таким веб-сервисом, я же у себя делал работу через http соединение есть желание разбираться и экспериментировать - попробуй заставить 1С работать своими средствами, нужен результат - сделай как я |
|||
9
Эмбеддер
20.12.14
✎
07:39
|
(6) не важно, чем "а" инициализирована до вызова а = Proxy.getLastDumpDateEx();
|
|||
10
Эмбеддер
20.12.14
✎
07:40
|
(5) проблема на в отправляемых, а в получаемых данных, что из названия темы следует
|
|||
11
Baloven
20.12.14
✎
07:50
|
(8) (9) (10) только что попробовал поставить просто строку
Proxy.getLastDumpDateEx(); и галку "останавливать по ошибке" так вот теперь он мне выдал что недостачно параметров.... нифига не понимаю ведь в документации сказано что getLastDumpDateEx вызывается без параметров и отдает их 5 штук.... |
|||
12
Baloven
20.12.14
✎
07:51
|
+(11) простоя я думал присвоив переменную - в нее как раз и получить эти 5 переменных
|
|||
13
Baloven
20.12.14
✎
07:54
|
уж не знаю как эти параметры задавать/получать
вот так: Proxy.getLastDumpDateEx("lastDumpDate"); облом вот так: Proxy.getLastDumpDateEx().lastDumpDate облом И вот так: Proxy.getLastDumpDateEx().Получить("lastDumpDate") все то же самое :( |
|||
14
Baloven
20.12.14
✎
07:55
|
lastDumpDate - это один из возвращаемых параметров
|
|||
15
Эмбеддер
20.12.14
✎
07:56
|
(11) в SoapUI смотрю, там нет параметров
запрос такой <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:oper="http://vigruzki.rkn.gov.ru/OperatorRequest/"> <soapenv:Header/> <soapenv:Body> <oper:getLastDumpDateEx/> </soapenv:Body> </soapenv:Envelope> результат <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://vigruzki.rkn.gov.ru/OperatorRequest/"> <SOAP-ENV:Body> <ns1:getLastDumpDateExResponse> <lastDumpDate>1419051000000</lastDumpDate> <lastDumpDateUrgently>1419051000000</lastDumpDateUrgently> <webServiceVersion>3.0</webServiceVersion> <dumpFormatVersion>2.0</dumpFormatVersion> <docVersion>4.1</docVersion> </ns1:getLastDumpDateExResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> |
|||
16
Baloven
20.12.14
✎
07:56
|
который нормально возвращается Proxy.getLastDumpDate - но в этом случае он единственный
|
|||
17
Эмбеддер
20.12.14
✎
07:57
|
(16) логично, если 1С не понимает возвращаемый Web сервисом тип данных структура...
|
|||
18
Baloven
20.12.14
✎
07:57
|
ну и ты получил ответ в соответсвии с http://vigruzki.rkn.gov.ru/docs/description_for_operators_actual.pdf - все абсолютно правильно
как его в 1С получить-то? |
|||
19
Эмбеддер
20.12.14
✎
08:01
|
если подойдет мое решение через http соединение, могу на почту кинуть через час. а как заставить 1С "прожевать" такой возвращаемый результат - только если это баг поправили в 1С
|
|||
20
Baloven
20.12.14
✎
08:01
|
я не вижу чтобы в (15) был тип данных структура - ответ правильный, и параметров и на запрос и по доке нету!!!
но весь трабл получить его 1с'кой |
|||
21
Baloven
20.12.14
✎
08:03
|
кинь - если не лень - если честно - для меня - это чисто вопрос самообразования и не более того - но всеж хочется его решить и ни как не могу понять в каком месте грабли :(
|
|||
22
Baloven
20.12.14
✎
08:06
|
... хм может с платформой связано у меня 1.3.58.2 - попробую новую поставить и попробовать - может что изменится
|
|||
23
alle68
20.12.14
✎
09:17
|
Вроде по-русски написано в инструкции: выходные параметры, 5 штук...
Proxy2.getLastDumpDateEx(п1, п2, п3, п4, п5); |
|||
24
Эмбеддер
20.12.14
✎
09:28
|
(23) а Вы точно уверены, что так можно?
|
|||
25
Эмбеддер
20.12.14
✎
09:29
|
Автор, адрес в личке неправильно указан, письмо не уходит
|
|||
26
Baloven
21.12.14
✎
01:33
|
(25) какой он старый :) я уже думал что его везде поменял-то :) новый заполнил
|
|||
27
Baloven
21.12.14
✎
01:38
|
(23) здесь главное ВЫХОДНЫЕ параметры, т.е. он отдать их 5 штук должен
специально на белавиа эксперементировал - там 1 параметр на входе (язык на котором сервис отдаст названия аэропортов) и отдает он таблицу и все нормально работает getLastDumpDate - тоже без параметра (как и getLastDumpDateEx), но в первом случае реально 1С получает ответ но там тольео 1 параметр выходной, а второй почему-то не работает и там выходных 5 параметров в (15) получен Эмббеддер'ом правильный ответ на запрос без параметров |
|||
28
Baloven
21.12.14
✎
01:40
|
+(23) если по вашему так - то что туда в параметры передать-то? пустые строки или пустые типизированные переменные?
|
|||
29
Baloven
21.12.14
✎
02:30
|
поставил новую платформу - результат тот же :(
|
|||
30
hhhh
21.12.14
✎
02:44
|
(27) ну создай пакет xdto, где перечисли эти 5 параметров и распиши их типы.
|
|||
31
alle68
21.12.14
✎
05:27
|
(28) Передавать ничего не надо, надо указать какие переменные принимают ВЫХОДНЫЕ параметры. В чём проблема принять 5 значений примитивного типа?
Выражение Значение Тип '1970-01-01'+п1/1000 21.12.2014 2:10:00 Дата п2 1 419 127 800 000 Число п3 "3.0" Строка п4 "2.0" Строка п5 "4.1" Строка |
|||
32
Эмбеддер
21.12.14
✎
06:06
|
(31) см. (24) Вы точно уверены, что можно таким образом получать выходные данные? или это предположение?
|
|||
33
Baloven
21.12.14
✎
06:13
|
(31) и как их получить? я ж писал что ошибку выдает обращения к процедуре как к функции... вы хоть бы сами попробовали - строки моего кода рабочие-то (точнее там указано что работает а что нет и чего хочется добиться!!!
(30) пример можно? (32) получил - спасибо, сейчас гляну |
|||
34
Baloven
21.12.14
✎
06:19
|
+(30) по в идеале (сейчас неуверен, но по мойму так и есть) когда смотрел отладчиком Proxy - где-то видел описание в какой-то из веток и входных и выходных параметров и их типы, т.е. исходя их этого - по сути можно статически не прописывая типы - выдернуть все это из того же Proxy... щас попробую еще раз поковырять найду - отпишусь
...но все же как работать (создавть/описывать) эти самые XDTO пакеты? |
|||
35
hhhh
21.12.14
✎
06:25
|
(34) ну есть в ут и в бп, в конфигурации описано. ну где общие модули, там ниже. Посмотри готовые как в типовых сделано.
|
|||
36
Baloven
21.12.14
✎
06:26
|
... да так и есть насчет описания типов параметров, например:
Proxy.Определение.Сервисы[0].ТочкиПодключения[0].Интерфейс.Операции[1].Параметры содержит колекцию WSПараметр - выходных (там вообще-то перечислено выходные они или выходные) для getLastDumpDateEx |
|||
37
Baloven
21.12.14
✎
06:27
|
(35) нет у меня ни УТ ни бухии у меня УПП стоит, а качать указанные - ну ... дорого - нет у нас безлимитов :(
|
|||
38
Baloven
21.12.14
✎
06:29
|
(36) "...перечислено выходные они или выходные" имел ввиду конечно же входные или выходные
|
|||
39
alle68
21.12.14
✎
06:31
|
(32) Если я их получил (см. таблицу в 31), то, наверное, уверен!
|
|||
40
Baloven
21.12.14
✎
06:32
|
(39) ты просто молодец - так объясни нучам каким кодом ты это получил?
|
|||
41
alle68
21.12.14
✎
06:38
|
Строку а2 = Proxy2.getLastDumpDateEx(); // здесь ругается
заменил на (23). |
|||
42
Baloven
21.12.14
✎
06:40
|
(39) alle68 извиняюсь - буру свои слова обратно - вы правы!!!
в общем код: Перем п1, п2, п3, п4, п5; WSDLОпределение2 = Новый WSОпределения("http://vigruzki.rkn.gov.ru/services/OperatorRequest/?wsdl"); WSСервис2 = WSDLОпределение2.Сервисы[0]; Proxy2 = Новый WSПрокси(WSDLОпределение2,WSСервис2.URIПространстваИмен,WSСервис2.Имя,WSСервис2.ТочкиПодключения[0].Имя); Proxy2.getLastDumpDateEx(п1, п2, п3, п4, п5); в итоге в обозначенных переменных и будут значения - спасибо огромное |
|||
43
Baloven
21.12.14
✎
06:41
|
+ (42) причем типизированные и описывать их нет надобности :)
|
|||
44
Baloven
21.12.14
✎
06:43
|
а насчет того что на выходе числа вместо времени - так в доке и указано что на выходе время в миллисекундах :)
|
|||
45
Baloven
21.12.14
✎
06:46
|
хорошо, с этим понятно, а может кто подскажет теперича как отправить файлы параметрами? я так понимаю что нужно аналогично getLastDumpDateEx в параметрах sendRequest
(там 3 входные и 3 выходные) указать 3м входным параметрам задать их значения, а выходные по принцыпу выше? |
|||
46
Эмбеддер
21.12.14
✎
06:51
|
(44) миллисекунды поделить на 1000 и прибавить к 01.01.1970
|
|||
47
Baloven
21.12.14
✎
06:58
|
(46) я это понял в (31) это написано :) это я "разжевал" для тех кто будет в далеком будущем читать эту ветку :)
|
|||
48
hhhh
21.12.14
✎
07:25
|
||||
49
Baloven
22.12.14
✎
05:35
|
вот что получилось:
Перем lastDumpDate, lastDumpDateUrgently, webServiceVersion, dumpFormatVersion,docVersion;//getLastDumpDateEx Перем requestFile,signatureFile;//sendRequest входные Перем result,resultComment,code;//sendRequest выходные Перем result_getResult,resultComment_getResult,registerZipArchive,resultCode_getResult,dumpFormatVersion_getResult;//getResult Выходные ЗапросXML = "C:\RKN\Request.xml"; Подпись = "C:\RKN\Request.xml.sig"; Результат = "C:\RKN\rezult.zip"; Сервис = "http://vigruzki.rkn.gov.ru/services/OperatorRequestTest/?wsdl"; WSDLОпределение = Новый WSОпределения(Сервис); WSСервис = WSDLОпределение.Сервисы[0]; Proxy = Новый WSПрокси(WSDLОпределение,WSСервис.URIПространстваИмен,WSСервис.Имя,WSСервис.ТочкиПодключения[0].Имя); Proxy.getLastDumpDateEx(lastDumpDate, lastDumpDateUrgently, webServiceVersion, dumpFormatVersion, docVersion); ддЗапросXML = Новый ДвоичныеДанные(ЗапросXML); ддПодпись = Новый ДвоичныеДанные(Подпись); ТипДвоичныеДанные = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "base64Binary"); requestFile = ФабрикаXDTO.Создать(ТипДвоичныеДанные,ддЗапросXML); signatureFile = ФабрикаXDTO.Создать(ТипДвоичныеДанные,ддПодпись); Proxy.sendRequest(requestFile,signatureFile,dumpFormatVersion,result,resultComment,code); Proxy.getResult(code,result_getResult,resultComment_getResult,registerZipArchive,resultCode_getResult,dumpFormatVersion_getResult); только теперь я опять туплю как из registerZipArchive (это и есть файл результата, т.е. по сути ZIP-архив - как его сохранить на диск? |
|||
50
Baloven
22.12.14
✎
06:45
|
все задачу решил :)
конечный результат - куму нужно пользуйтесь, только вот я не понял - неужели сохранять двоичные данные можно только через хранилище значений? Перем lastDumpDate, lastDumpDateUrgently, webServiceVersion, dumpFormatVersion,docVersion;//getLastDumpDateEx Перем requestFile,signatureFile;//sendRequest входные Перем result,resultComment,code;//sendRequest выходные Перем result_getResult,resultComment_getResult,registerZipArchive,resultCode_getResult,dumpFormatVersion_getResult;//getResult Выходные ЗапросXML = "C:\RKN\Request.xml"; Подпись = "C:\RKN\Request.xml.sig"; Результат = "C:\RKN\rezult.zip"; Сервис = "http://vigruzki.rkn.gov.ru/services/OperatorRequestTest/?wsdl"; WSDLОпределение = Новый WSОпределения(Сервис); WSСервис = WSDLОпределение.Сервисы[0]; Proxy = Новый WSПрокси(WSDLОпределение,WSСервис.URIПространстваИмен,WSСервис.Имя,WSСервис.ТочкиПодключения[0].Имя); Proxy.getLastDumpDateEx(lastDumpDate, lastDumpDateUrgently, webServiceVersion, dumpFormatVersion, docVersion); ддЗапросXML = Новый ДвоичныеДанные(ЗапросXML); ддПодпись = Новый ДвоичныеДанные(Подпись); ТипДвоичныеДанные = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "base64Binary"); requestFile = ФабрикаXDTO.Создать(ТипДвоичныеДанные,ддЗапросXML); signatureFile = ФабрикаXDTO.Создать(ТипДвоичныеДанные,ддПодпись); Proxy.sendRequest(requestFile,signatureFile,dumpFormatVersion,result,resultComment,code); Proxy.getResult(code,result_getResult,resultComment_getResult,registerZipArchive,resultCode_getResult,dumpFormatVersion_getResult); УдалитьФайлы(Результат); ХранилищеФайла = Новый ХранилищеЗначения(registerZipArchive); ХранилищеФайла.Получить().Записать(Результат); |
|||
51
Baloven
22.12.14
✎
06:48
|
ну и да если кому действительно нужно для получение с сайта РКН файла выгрузки - то нужно тестовый сервер сменить на действующий и делать ожидание получения файла (переменная code) с периодической проверкой getResult, ну а для этого code надо в переменный формы/модуля или куда хотите с признаком Экспорт :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |