|
Отправка документов через веб сервис | ☑ | ||
---|---|---|---|---|
0
D_Sergeevich
01.05.13
✎
14:38
|
Приветствую. Всех с наступающим.
Помоги разобраться с веб сервисом. Первый раз с ними сталкиваюсь. Есть веб сервис банка, нужно через него скидывать электронные документы. Подключение к веб сервису я выполнил так: Процедура ПодключениеКВебСервису() WSОпределение = Новый WSОпределения("https://dc_6/WebLoader/LoaderSrv.asmx?wsdl","fgrpmr","FeRr2fN"); WSПрокси = Новый WSПрокси(WSОпределение,"http://tempuri.org/","LoaderSrv","LoaderSrvSoap"); Фабрика = WSПрокси.ФабрикаXDTO; КонецПроцедуры Скрин отладчика на "WSПрокси", я добрался до методов через которые сбрасываются доки. Что делать дальше? http://i5.pixs.ru/storage/9/7/7/otlJPG_1881867_7860977.jpg Это описание этих методов веб сервиса Методы public long LoadReport(byte [] ReportData, string FileName, out string ResultString) предназначен для сброса форматного ОЭД (электронный документ) Параметр Тип Описание ReportData IN Byte[] Передаваемый ОЭД в виде массива байт. ОЭД должен быть зашифрован и подписан ЭЦП отправителя FileName IN string Имя файла, соответствующего ОЭД ResultString OUT string Описание ошибки в случае если метод вернул не ноль //Метод возвращает ноль, если операция завершена успешно, код ошибки в противном случае |
|||
1
ДенисЧ
01.05.13
✎
14:46
|
и в чём проблема?
|
|||
2
D_Sergeevich
01.05.13
✎
14:49
|
(1)Проблема в том что я не знаю че делать дальше, как Строку данных преобразовать в массив байт и потом этот массив передать
|
|||
3
ДенисЧ
01.05.13
✎
14:51
|
(2) ДвоичныеДанные пробовал пихать?
|
|||
4
D_Sergeevich
01.05.13
✎
14:54
|
Как?
|
|||
5
ДенисЧ
01.05.13
✎
14:56
|
(4) мммм.....
Записать в файл, создать ДвоичныеДанные из этого файла и пихнуть в параметры? По крайней мере, в самописный ws у меня так зип пролетает на ура. |
|||
6
D_Sergeevich
01.05.13
✎
14:59
|
Ну ладно, ну а далее как эти данные передать? можно плиз пример кода
|
|||
7
yukon
01.05.13
✎
15:29
|
> public long LoadReport(byte [] ReportData, string FileName, out string ResultString)
Нет такого в веб-сервисах. Это они дали заголовок своего обработчика. А работаешь-ты с вэб-сервисом, а не с их программным кодом. Ты лучше загрузи описание в Общие-WSСсылки и посмотри там типы параметров соответствующей операции. |
|||
8
D_Sergeevich
01.05.13
✎
15:38
|
(7) Я добавлял WSСылку она появляется, но структура не загружается. т.е. там пусто....
|
|||
9
yukon
01.05.13
✎
15:42
|
(8) Скорее всего из-за авторизации не импортируется.
Зайди по ссылке "ht tps://dc_6/WebLoader/LoaderSrv.asmx?wsdl" с именем и паролем, сохрани содержимое на диск, затем в имени импортируемого WSDL укажи имя файла. |
|||
10
Нуф-Нуф
01.05.13
✎
15:45
|
демобаза документооборота последнего релиза - ихмо отличный вариант потренироваться на кошках
|
|||
11
D_Sergeevich
01.05.13
✎
15:48
|
(9)Чет я не понял. Я жму wsсылки - добавить, задаю адрес "https://dc_6/WebLoader/LoaderSrv.asmx" просит логин и пас, ввожу и все ссылка добавляется, но в просмотре структуры нету. Какое содержимое сохранить на диск?
Да и еще если я ввожу так "https://dc_6/WebLoader/LoaderSrv.asmx?wsdl" то пишет неверный формат |
|||
12
D_Sergeevich
01.05.13
✎
15:52
|
Если сохранить содержимое https://dc_6/WebLoader/LoaderSrv.asmx?wsdl в xml на диск и потом через импорт прописать путь до этого xml то тоже пишет неверный формат
|
|||
13
yukon
01.05.13
✎
15:54
|
(11) Какое содержимое сохранить на диск?
Кодовое слово - "https". Открой ссылку в браузере, затем жми "сохранить" или "сохранить страницу" или как там у тебя в браузере. По возможности задай расширение у файла .wsdl |
|||
14
yukon
01.05.13
✎
15:56
|
(12) Значит там еще файлы нужны. Обычно это всякие xsd файлы.
|
|||
15
D_Sergeevich
01.05.13
✎
15:58
|
(11) Также пишет неверный формат
|
|||
16
D_Sergeevich
01.05.13
✎
15:58
|
т.е. (13) Также пишет неверный формат
|
|||
17
yukon
01.05.13
✎
16:02
|
Ладно попробуй так:
|
|||
18
D_Sergeevich
01.05.13
✎
16:11
|
(17)Обращение к процедуре объекта как к функции (LoadReport)
|
|||
19
yukon
01.05.13
✎
16:18
|
(17) Значит все переписывать заново :)
|
|||
20
yukon
01.05.13
✎
16:22
|
(18) и да - значит разработчики веб-сервиса продятлили - у метода приложения есть возвращаемый результат, а у соответствующего метода веб-сервиса нет. Можешь им в баг-репорт заслать.
Это как иллюстрация к (7) - реализации методов могут различаться, и тебе нужна только та реализация с которой ты непосредственно работаешь. |
|||
21
yukon
01.05.13
✎
16:26
|
+ Точно баг. В твоем скриншоте:
Свойство: "Возвращаемое значение" Тип: Неопределено |
|||
22
D_Sergeevich
01.05.13
✎
16:34
|
Если так (19) То пишет что не достаточно параметров
Написал так т.к. их фактически 6 Прокси.LoadReport(ДвоичныеДанные, ИмяФайла,,,, ТекстОшибки); И 1с сваливается полностью. |
|||
23
D_Sergeevich
01.05.13
✎
16:35
|
У меня есть на с# клиент их который работает с этой службой, могу взять у них исходники после праздников, может там можно будит разобраться?
|
|||
24
D_Sergeevich
01.05.13
✎
16:37
|
А можно как то подключить к 1с этот клиент? Там тупо прописана папка где хранятся доки, и в клиенте одна копка отправить и все, больше там ничего нету. Этот клиент шифрует файл и отправляет его.
|
|||
25
yukon
01.05.13
✎
16:43
|
(22) > Прокси.LoadReport(ДвоичныеДанные, ИмяФайла,,,, ТекстОшибки)
Так ты фактически написал Прокси.LoadReport(ДвоичныеДанные, ИмяФайла,Неопределено,Неопределено,Неопределено, ТекстОшибки); Нужно смотреть реальные типы параметров. К сожалению, на твоем скриншоте они не поместились. Ну и в документации должно же быть описано, что они означают. Походу у них документация "протухла". |
|||
26
D_Sergeevich
01.05.13
✎
16:45
|
На скриншоте они как раз есть 0-5 в самом низу. А документации вообще нету. Эту службу писал чел, который уже не работает. ((
|
|||
27
yukon
01.05.13
✎
16:46
|
(26) Типы не поместились. Имя видно полностью, а тип "{www...".
|
|||
28
D_Sergeevich
01.05.13
✎
16:53
|
||||
29
D_Sergeevich
01.05.13
✎
16:54
|
Блин, 0 строка там {http://www.w3.org/2001/XMLSchema}base64Binary
|
|||
30
yukon
01.05.13
✎
16:57
|
(29) base64Binary - это и есть ДвоичныеДанные.
|
|||
31
yukon
01.05.13
✎
16:57
|
+ Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://www.w3.org/2001/XMLSchema}. Имя типа XDTO: может быть любым из перечисленных: base64Binary, hexBinary
|
|||
32
yukon
01.05.13
✎
17:00
|
(28) Ну так сделай
|
|||
33
D_Sergeevich
01.05.13
✎
17:07
|
(32) Неа, так 1с сваливается и не отвечает. Может из за того что данные не шифруются и не подписываются?
|
|||
34
yukon
01.05.13
✎
17:15
|
(33) Что значит сваливается? Выскакивает ошибка какая-то? Если нет, то это значит, что 1С ждет результат от сторонней системы, т.е. это уже не вопрос 1С.
Выставь для начала таймаут при создании прокси. Прокси.Таймаут = 5; |
|||
35
D_Sergeevich
01.05.13
✎
17:17
|
(34)Сваливается с ошибкой типа отправить в майкрософт и т.д.
|
|||
36
yukon
01.05.13
✎
17:18
|
(33) > Может из за того что данные не шифруются и не подписываются?
По идее для того чтобы тебе это сообщить есть ResultString, она же ТекстОшибки. |
|||
37
yukon
01.05.13
✎
17:21
|
(35) А размер файла какой у тебя?
|
|||
38
D_Sergeevich
01.05.13
✎
17:23
|
(37) Да там одна строчка, всего 4кб.
|
|||
39
yukon
01.05.13
✎
17:30
|
(38) тогда остается только ошибка в WSDL описании. Тем более, что оно у тебя импортироваться не хочет.
|
|||
40
D_Sergeevich
01.05.13
✎
17:34
|
(39)А как же тогда клиент на си шарпе работает...
|
|||
41
yukon
01.05.13
✎
17:42
|
(40) Скажем так. 1С накладывает более строгие ограничения на описание WSDL, чем это требуется по стандарту. Поэтому валидный с т.ч. стандартов WSDL, может быть невалидным для 1С.
Выложи куда-нибудь wsdl, может чего можно подправить. |
|||
42
D_Sergeevich
01.05.13
✎
17:46
|
<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="http://tempuri.org/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://tempuri.org/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/"> <s:import namespace="http://www.w3.org/2001/XMLSchema" /> <s:element name="GetPayCard"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="date_of_move" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="GetPayCardResponse"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="GetPayCardResult" type="s:long" /> <s:element minOccurs="0" maxOccurs="1" name="result" type="s:base64Binary" /> <s:element minOccurs="0" maxOccurs="1" name="error_description" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="LoadNFReport"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="ReportData" type="s:base64Binary" /> <s:element minOccurs="0" maxOccurs="1" name="FileName" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="Formular" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="DateString" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="LoadNFReportResponse"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="LoadNFReportResult" type="s:long" /> <s:element minOccurs="0" maxOccurs="1" name="ResultString" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="LoadReport"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="ReportData" type="s:base64Binary" /> <s:element minOccurs="0" maxOccurs="1" name="FileName" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="LoadReportResponse"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="LoadReportResult" type="s:long" /> <s:element minOccurs="0" maxOccurs="1" name="ResultString" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="GetDocIds"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="filename" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="GetDocIdsResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="GetDocIdsResult"> <s:complexType> <s:sequence> <s:element ref="s:schema" /> <s:any /> </s:sequence> </s:complexType> </s:element> <s:element minOccurs="0" maxOccurs="1" name="details" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="GetEdErrors"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="filename" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="GetEdErrorsResponse"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="GetEdErrorsResult" type="s:long" /> <s:element minOccurs="0" maxOccurs="1" name="result" type="s:base64Binary" /> <s:element minOccurs="0" maxOccurs="1" name="details" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="LoadNonFormatReport"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="ReportData" type="s:base64Binary" /> <s:element minOccurs="0" maxOccurs="1" name="FileName" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="Formular" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="DateString" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="LoadNonFormatReportResponse"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="LoadNonFormatReportResult" type="s:long" /> <s:element minOccurs="0" maxOccurs="1" name="ResultString" type="s:string" /> </s:sequence> </s:complexType> </s:element> </s:schema> </types> <message name="GetPayCardSoapIn"> <part name="parameters" element="s0:GetPayCard" /> </message> <message name="GetPayCardSoapOut"> <part name="parameters" element="s0:GetPayCardResponse" /> </message> <message name="LoadNFReportSoapIn"> <part name="parameters" element="s0:LoadNFReport" /> </message> <message name="LoadNFReportSoapOut"> <part name="parameters" element="s0:LoadNFReportResponse" /> </message> <message name="LoadReportSoapIn"> <part name="parameters" element="s0:LoadReport" /> </message> <message name="LoadReportSoapOut"> <part name="parameters" element="s0:LoadReportResponse" /> </message> <message name="GetDocIdsSoapIn"> <part name="parameters" element="s0:GetDocIds" /> </message> <message name="GetDocIdsSoapOut"> <part name="parameters" element="s0:GetDocIdsResponse" /> </message> <message name="GetEdErrorsSoapIn"> <part name="parameters" element="s0:GetEdErrors" /> </message> <message name="GetEdErrorsSoapOut"> <part name="parameters" element="s0:GetEdErrorsResponse" /> </message> <message name="LoadNonFormatReportSoapIn"> <part name="parameters" element="s0:LoadNonFormatReport" /> </message> <message name="LoadNonFormatReportSoapOut"> <part name="parameters" element="s0:LoadNonFormatReportResponse" /> </message> <portType name="LoaderSrvSoap"> <operation name="GetPayCard"> <input message="s0:GetPayCardSoapIn" /> <output message="s0:GetPayCardSoapOut" /> </operation> <operation name="LoadNFReport"> <input message="s0:LoadNFReportSoapIn" /> <output message="s0:LoadNFReportSoapOut" /> </operation> <operation name="LoadReport"> <input message="s0:LoadReportSoapIn" /> <output message="s0:LoadReportSoapOut" /> </operation> <operation name="GetDocIds"> <input message="s0:GetDocIdsSoapIn" /> <output message="s0:GetDocIdsSoapOut" /> </operation> <operation name="GetEdErrors"> <input message="s0:GetEdErrorsSoapIn" /> <output message="s0:GetEdErrorsSoapOut" /> </operation> <operation name="LoadReport"> <input name="LoadNonFormatReport" message="s0:LoadNonFormatReportSoapIn" /> <output name="LoadNonFormatReport" message="s0:LoadNonFormatReportSoapOut" /> </operation> </portType> <binding name="LoaderSrvSoap" type="s0:LoaderSrvSoap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> <operation name="GetPayCard"> <soap:operation soapAction="http://tempuri.org/GetPayCard" style="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="LoadNFReport"> <soap:operation soapAction="http://tempuri.org/LoadNFReport" style="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="LoadReport"> <soap:operation soapAction="http://tempuri.org/LoadReport" style="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="GetDocIds"> <soap:operation soapAction="http://tempuri.org/GetDocIds" style="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="GetEdErrors"> <soap:operation soapAction="http://tempuri.org/GetEdErrors" style="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="LoadReport"> <soap:operation soapAction="http://tempuri.org/LoadNonFormatReport" style="document" /> <input name="LoadNonFormatReport"> <soap:body use="literal" /> </input> <output name="LoadNonFormatReport"> <soap:body use="literal" /> </output> </operation> </binding> <service name="LoaderSrv"> <port name="LoaderSrvSoap" binding="s0:LoaderSrvSoap"> <soap:address location="https://dc_6/WebLoader/LoaderSrv.asmx" /> </port> </service> </definitions> |
|||
43
yukon
01.05.13
✎
18:45
|
Только метод LoadReport:
|
|||
44
yukon
01.05.13
✎
18:53
|
получается в итоге:
LoadReport( {http://www.w3.org/2001/XMLSchema}base64Binary ReportData, {http://www.w3.org/2001/XMLSchema}string FileName, {http://www.w3.org/2001/XMLSchema}long LoadReportResult, {http://www.w3.org/2001/XMLSchema}string ResultString) или {http://www.w3.org/2001/XMLSchema}long LoadReport( {http://www.w3.org/2001/XMLSchema}base64Binary ReportData, {http://www.w3.org/2001/XMLSchema}string FileName, {http://www.w3.org/2001/XMLSchema}string ResultString) Соответственно вызовы: Результат = Прокси.LoadReport(ДвоичныеДанные, ИмяФайла, ТекстОшибки); либо Прокси.LoadReport(ДвоичныеДанные, ИмяФайла, Результат, ТекстОшибки); |
|||
45
D_Sergeevich
01.05.13
✎
19:13
|
(43)(44) Блин афигеть, заработало. Теперь LoadReportResult выдал -5. Значит файл отправляется. Теперь встает вопрос как сюда прикрутить криптомодуль, которым будут шифроваться данные
|
|||
46
D_Sergeevich
01.05.13
✎
19:29
|
Криптомодуль состоит из десятка dll которые регистрируются в системе и твик реестра в котором одна ветка с путями на публичные и секретные ключи.
Можно ли использовать из 1с crypto.dll? |
|||
47
D_Sergeevich
01.05.13
✎
19:41
|
(44)yukon Огромное спасибо за помощь! ))
|
|||
48
yukon
01.05.13
✎
20:18
|
(46) > Можно ли использовать из 1с crypto.dll?
Таких crypto.dll - куча. Надо понимать какой именно, хотя бы автора. Ну а использовать - либо через МенеджерКриптографии - если crypto.dll в Windows распознается как провайдер криптографии, либо через COMОбъект. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |