|
Подключение к Web-сервису стороннего разработчика (не 1С) | ☑ | ||
---|---|---|---|---|
0
yurii-syrkin
11.10.13
✎
08:19
|
Всем здравствуйте. В общем немного прояснилось, оказывается стандартный механизм платформы (WS ссылка) на данный момент как я понимаю имеют ограниченный функционал для работы с soap. Далеко не каждый wsdl способен определиться, пусть даже в soap ui проблем с ним не возникает. У 1С на этот счет свои требования, о которых мне в результате двухнедельных боев так и не посчастливилось узнать. Теперь вопрос в следующем: как мне подключиться через COM к web-сервису. Операционная система windows 2008 r2 поэтому MSSOAP.SoapClient30 никак не получается воспользоваться, может что не так делаю, вылетает с ошибкой "класс не зарегистрирован"
|
|||
1
Asmody
11.10.13
✎
08:26
|
(0) веб-сервис, видимо, на java?
Можно взять wsdl, допилить до вида, который прожует 1С, но это долго и муторно. Можно написать "прослойку" на чем-то, что понимает ws с той стороны и устроит 1С |
|||
2
shuhard
11.10.13
✎
08:33
|
||||
3
yurii-syrkin
11.10.13
✎
08:34
|
wsdl я допиливал, только пришлось убирать теги, которые отвечают за авторизацию. Видимо именно со способами авторизации у 1С не все хорошо. А вот с прослойкой это интересно. Под силу ли это 1С программисту?)
|
|||
4
yurii-syrkin
11.10.13
✎
10:07
|
(2) А вы сами пробовали этим пользоваться? Может чего не понимаю, но я скачал, поставил, посмотрел мануал, эти два общих модуля ни слова про soap, ни слова про wsdl. Что это такое не пойму. http get и post они и без этого работают. Кому интересно это пригодится. Сейчас еще посмотрю, конечно
|
|||
5
Смотрящий от 1С
11.10.13
✎
10:10
|
(0) если не секрет с каким внешним сервисом возитесь? Я сам бодаюсь с одним уже недели три
|
|||
6
yurii-syrkin
11.10.13
✎
10:18
|
(5)Заказчики говорили это конфиденциально, хотя ничего такого в принципе, но вы бы все равно не смогли его открыть в браузере, там ограничение по ip-адресам установлено. На всякий случай писать не буду, вдруг в поиск зададут) На сколько сильно продвинулись? Что перепробовали?
|
|||
7
yurii-syrkin
11.10.13
✎
10:24
|
Вот концовка wsdl, без которой все определяется:
</wsdl:binding> - <wsdl:service name="GarbageRouteService"> - <wsdl:port binding="tns:GarbageRouteServiceSoapBinding" name="GarbageRouteServiceImplPort"> <soap:address location="http://ods.fors.ru:80/garbageRoute/garbageRouteWebService" /> </wsdl:port> </wsdl:service> - <wsp:Policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" wsu:Id="UsernameToken" xsi:schemaLocation="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702 http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/ws-securitypolicy-1.2.xsd"> - <wsp:ExactlyOne> - <wsp:All> - <sp:SupportingTokens> - <wsp:Policy> - <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"> <wsp:Policy /> </sp:UsernameToken> </wsp:Policy> </sp:SupportingTokens> </wsp:All> </wsp:ExactlyOne> </wsp:Policy> </wsdl:definitions> |
|||
8
yurii-syrkin
11.10.13
✎
11:15
|
Хорошо. К примеру я убрал эти теги, у меня ws ссылка нормально определилась в конфигураторе. Почему у меня вылетает ошибка на строке WSСсылки.WS_АСУ_ОДС.СоздатьWSПрокси("
Ошибка по причине: Сервис не найден. |
|||
9
Смотрящий от 1С
11.10.13
✎
11:16
|
(7) не мой, вижу)). Где то встречал статью Гения1С, он там писал, про то, что 1С не любит Policy в WSDL
|
|||
10
yurii-syrkin
11.10.13
✎
11:28
|
Да, я тоже читал, благодаря этому и смог хоть как-то загрузить этот wsdl. Только теперь при создании ошибка лезет. Вообще, конечно, не понятно, возможно ли такое, что в 1С один wsdl, а там на web-сервисе другой, пусть не на много, но отличный. Будет это работать или нет?
|
|||
11
Balonbl4
11.10.13
✎
12:07
|
Будь мужиком!
Сформируй xml "руками" и скорми его сервису POST запросом |
|||
12
Serginio1
11.10.13
✎
12:12
|
||||
13
Leksus
11.10.13
✎
12:16
|
(11) плюсану
|
|||
14
Serginio1
11.10.13
✎
13:54
|
(8) Ты секцию service то оставь
Удали только то, что после нё. |
|||
15
yurii-syrkin
11.10.13
✎
15:18
|
Выдает: "Internal Server Error" на строке: Сообщить("" + xmlHttp.statusText);
|
|||
16
yurii-syrkin
11.10.13
✎
15:20
|
hostName ставлю ip адрес сервера, а urlAddress - значение soap:address location из WSDL. Правильно?
|
|||
17
Serginio1
11.10.13
✎
15:27
|
(16) да
|
|||
18
Serginio1
11.10.13
✎
15:30
|
У меня был один сайт так я его через сборку .Net использовал
v8: Вопрос по NetObjectToIDispatch Сейчас с 7.7 буду использовать. |
|||
19
yurii-syrkin
11.10.13
✎
17:07
|
Вообще, конечно MSXML2.xmlHttp это то что нужно в моем случае, но что я похоже не так делаю:
DOC=New COMОбъект("MSXML2.DOMDocument"); DOC.loadXML(ТекстЗапроса); If DOC.parseError.errorCode <> 0 Then Сообщить("Ошибка разбора XML " + DOC.parseError.reason); Возврат; EndIf; DOC.save(КаталогФайловОбмена + "\2.xml"); hostName="212.5.79.138"; urlAddress="http://ods.fors.ru:80/garbageRoute/garbageRouteWebService/"; Состояние("Выполнение запроса..." + hostName); xmlHttp = New COMОбъект("MSXML2.xmlHttp"); xmlHttp.OPEN("GET", urlAddress, False); // False- отвечает за то, что запррос асинхронный и ожидаем ответа xmlHttp.setRequestHeader("Host", hostName); xmlHttp.setRequestHeader("Content-type", "application/soap+xml; charset=""utf-8"""); xmlHttp.SEND(DOC); Сообщить("" + xmlHttp.statusText); DOCToSave=New COMОбъект("MSXML2.DOMDocument"); DOCToSave.loadXML(xmlHttp.responseText); If DOCToSave.parseError.errorCode <> 0 Then Сообщить("Ошибка разбора XML результата: " + DOC.parseError.reason); //Возврат; EndIf; DOCToSave.save(КаталогФайловОбмена + "\GetData.xml"); на строке Сообщить("" + xmlHttp.statusText); ошибка 500, текст ошибки Internal Server Error и xmlHttp.responseText = <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode>soap:Server</faultcode><faultstring>No binding operation info while invoking unknown method with params unknown.</faultstring></soap:Fault></soap:Body></soap:Envelope>. Что не так? |
|||
20
Serginio1
11.10.13
✎
17:16
|
||||
21
yurii-syrkin
11.10.13
✎
22:13
|
(20) Это безусловно очень важная и интересная информация и я её себе сохранил на всякий случай, но как мне воспользоваться этим для решения своих проблем?
|
|||
22
Serginio1
12.10.13
✎
00:46
|
Попробуй воспользоваться C#. А прочитать стоит, что бы понять, что напрямую соединиться не получится
|
|||
23
yurii-syrkin
12.10.13
✎
00:56
|
Да вот я уже тоже сейчас в этом направлении работаю. Никогда не приходилось сталкиваться, а тут на тебе. Учитывая мой исключительно 1С-овский уклад, мне похоже непросто придется, да?) Я так понял надо написать внешнюю компоненту и обращаться к ней из 1С?
|
|||
24
Serginio1
12.10.13
✎
11:45
|
(23) Нет не надо. Нужно сделать сборку с подключением к Вэб сервису. А затем через v8: Вопрос по NetObjectToIDispatch через COM использовать её обернув объекты через AutoWrap.
Заходишь в Вижуал студию,Создаешь библиотеку, добавляешь ссылку на службу (совместимость с 2.0) Добавляешь класс который возвращает объект соединения обернутый в AutoWrap [ComVisible(true)] [ProgId("ИмяТвоегоПрогИД")] [ClassInterface(ClassInterfaceType.AutoDispatch)] [Guid("Создаешь свой ГУИД")] public class ИмяТвоегоКласс// { public object Подключиться() { return new AutoWrap(new ПодключениеКТвоемуВэбСервису); } А с этим объектом работаешь из 1С как с COM объектом |
|||
25
Serginio1
12.10.13
✎
11:56
|
Можно и без совместимости
|
|||
26
yurii-syrkin
23.10.13
✎
16:17
|
В общем, ребят, удалось все таки повлиять на разработчиков веб сервиса, чтобы они изменили способ аутентификации. 1С принимает только базовый способ.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |