Обращение к Web-services

  • Автор темы Klido
  • Дата начала
K

Klido

Неожиданно возникла тема подключаться к удаленным вэб-сервисам. Поскольку ранее не приходилось этого делать, есть вопрос.
Нарыл разных способов подключения, интересует сервер-сервер. SOAPConnector класс для LS с sandbox кажется наиболее подходящим на данный момент, но как-то староват он (2002 год...). Есть ли у кого опыт активного использования неродных вэбсервисов именно на стороне сервера, что наиболее правильное задействовать (или всё-таки клиентская часть?) и есть ли там ньюансы, которые стоит сразу учесть? Дабы не терять драгоценное время на раскопки...
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
ИМХО сервер-сервер - java
 
Р

Реник

<!--shcode--><pre><code class='аа'>Dim Connector As Variant, Serializer As Variant, Reader As Variant
On Error Goto ERROR_HANDLER

Set Client =CreateObject("MSSOAP.SoapClient30")
Set Serializer =createobject("MSSOAP.SoapSerializer30")
Set connector =createobject("MSSOAP.HttpConnector30")

Set Reader=createobject ("MSSOAP.SoapReader30")


Connector.Property("EndPointURL") = wsdllink
Connector.Property("UseSSL") = True
Connector.Property("AuthUser") = login
Connector.Property("AuthPassword") = Passw0rd



Call Connector.Connect
' устанавливаем Тайм-аут ,чтобы сервис сммог отработать нормально
Connector.Property("Timeout") = 300000
Connector.Property("ConnectTimeout")=300000
Connector.Property("SoapAction") ="параметр Soap Action из wsdl"

Call Connector.BeginMessage

' ловим выходной поток отработки метода wsdl- файла

' здесь надо заменить "http://schemas.xmlsoap.org/soap/envelope/" на то,что будет стоять в wsdl на ссответсвующем месте
Serializer.Init Connector.InputStream
Serializer.StartEnvelope "SOAP-ENV" , "http://schemas.xmlsoap.org/soap/encoding/"
Serializer.StartBody


' когда будет измененго название метода, то его надо будет включить сюда
Serializer.StartElement "WriteUpdateSdelkaInfo" , "https://mspvm03.it.ru:442/"


Serializer.startElement "название параметра из WSDL , куда записываем значение" , "https://mspvm03.it.ru:442/"
Serializer.writeString param0
Serializer.EndElement


Serializer.EndElement


Serializer.endBody

Serializer.endEnvelope


'Проверяем на наличие ошибок


Call Connector.EndMessage


Reader.Load Connector.OutputStream


Set SoapServer = CreateObject("MSSOAP.SoapServer30")

SoapServer.SoapInvoke Connector.InputStream, Connector.OutputStream, SOAPAction


runmethodfromwsdlfile=Cstr(Reader.Body.xml)

Msgbox "Результат работы метода" + runmethodfromwsdlfile

ERROR_HANDLER:
Print "Ошибка " & Cstr(Err) & " (" & Error & ") в строке " & Cstr(Erl)[/CODE]Есть ещё один вариант: не знаю понравится-нет,но работает 100%.

1. На сервер поставить SOAP Toolkit 3.0.

2. Далее можно написать следующего агента на LS, котoрый будет вызывать web-service и т авит необходимый TimeOut (если надо):
 
K

Klido

Реник
всё бы ничего, но MSSOAP не катит - сервак на линухе... С Java всё понятно, осталось решить запариться ли в неё или всё-таки LS-классом быстрее :bequiet:
 

vincent_vega

Green Team
02.04.2005
169
1
BIT
0
+1 за java.
Для тестов вызова веб-сервисов рекомендую использовать soapUI
 
N

nvyush

Реник
всё бы ничего, но MSSOAP не катит - сервак на линухе... С Java всё понятно, осталось решить запариться ли в неё или всё-таки LS-классом быстрее :welcome:
В подобном случае писал java-библиотеку (класс с постящей функцией и sax-парсером для разбора ответа), а вызывал через LS2J. За день разобрался.
 

rinsk

Lotus Team
12.11.2009
1 156
126
BIT
46
Неожиданно возникла тема подключаться к удаленным вэб-сервисам. Поскольку ранее не приходилось этого делать, есть вопрос.
Нарыл разных способов подключения, интересует сервер-сервер. SOAPConnector класс для LS с sandbox кажется наиболее подходящим на данный момент, но как-то староват он (2002 год...). Есть ли у кого опыт активного использования неродных вэбсервисов именно на стороне сервера, что наиболее правильное задействовать (или всё-таки клиентская часть?) и есть ли там ньюансы, которые стоит сразу учесть? Дабы не терять драгоценное время на раскопки...

А чем встроенный не подходит?

Web Service Consumer PortType class In the Web Service Provider feature, first available in Release 7.0, the PortType class is where the application developer enters their code that executes to process a web service request. In the Web Service Consumer feature, first available in Release 8.0, the PortType class is completely generated, based on the WSDL document. It contains methods for all the operations described in the imported WSDL document. The WSDL generated PortType class derives from this PortTypeBase class. The PortTypeBase class provides a set of common operations that are useful in writing client-side applications for web services.
 
N

nvyush

А чем встроенный не подходит?

Как я понял, встроненный веб-сервис работает когда клиент (или другой сервер) запрашивает информацию с сервера Domino. В случае, когда серверу Domino нужно запросить информацию с другого сервера, они не работают. Поправьте, если я ошибаюсь.
 

rinsk

Lotus Team
12.11.2009
1 156
126
BIT
46
Как я понял, встроненный веб-сервис работает когда клиент (или другой сервер) запрашивает информацию с сервера Domino. В случае, когда серверу Domino нужно запросить информацию с другого сервера, они не работают. Поправьте, если я ошибаюсь.

Ошибаетесь - реализовано и то и другое.
 
K

Klido

rinsk
точно, похоже то, что надо! :) как-то в этот раздел после 7-ки не смотрел, а для 7-ки только провайдер сервисов был... пошел тестить...
 
K

Klido

Web Service Consumer - прикольная штука. Да, генерит классы для работы со сторонними WS, но...
Как раз там, где надо, сменилась версия на серваке WS Axis c 1 на 2 и лезет ошибка при генерации, мол не хватает чего-то там в wsdl... в инете похожие у народа есть ошибки - мол что-то про некорректность отдачи wsdl при смене версий именно для soap 1.1, который имеется в DD 8.5.1фп1. Не тянет ни в LS, ни в Java...
Вот интересно, даже если получить классы каким-либо иным способом (ну там wsdl2java, например) и засунуть их в WSC - будет оно работать или не даст скомпилить?
И, похоже, придется топать по этой теме на форумы JAVA....
 
N

nvyush

Ошибаетесь - реализовано и то и другое.
Достоинство — простота, недостаток — не работает (с)...
Попробовал создать Web Service Consumer (на ЛС), получил wsdl, импортнул в библиотеку, как в справке описано, получил класс в десять строк кода.
Создаю экземпляр сего класса, вызываю его единственный метод и Лотус виснет :(
 
K

Klido

Достоинство — простота, недостаток — не работает (с)...
у меня вроде как работает, но трабл в другом.. и следствие зашло в тупик ;)
Есть внешний wsdl, домино не генерит по нему классы с еррором... Более того, всякие XMLSpy ругаются на то, что некорректный wsdl... Суппорт хозяев софтины, что wsdl предоставляет отморозились и говорят, что работает как задумано... В окрестностях знатоков wsdl нет, чтоб сказать как именно поправить надо...
Если кто поможет решить - буду признателен, вот файло... Конечная цель - получить корректный wsdl хотя бы, чтоб на его основе сгенерило мне классов...
Посмотреть вложение SDService.zip
 
N

nvyush

у меня вроде как работает, но трабл в другом.. и следствие зашло в тупик ;)
Если кто поможет решить - буду признателен, вот файло... Конечная цель - получить корректный wsdl хотя бы, чтоб на его основе сгенерило мне классов...
Стоит попробовать для начала убрать табуляторы и переводы строк.
 
K

Klido

Стоит попробовать для начала убрать табуляторы и переводы строк.
мда? у меня нет никаких табуляторов.... или в нотепаде надо смотреть? ;) кстати, вот тут видно и еррор, который говорит тулза...
wsdl.jpg

element <fault> 'RemoteException' in operation 'getServiceCallEventLog' (portType 'SDServicePortType') has no match in operation 'getServiceCallEventLog' (binding 'SDServiceHttpBinding')!
 
K

Klido

Лотус с такими хмл не очень дружит
ну это версия wsdl-2, с 1-й он дружит прекрасно... но там нет половины того, что есть в этой... и хз как, что и куда надо поменять ;) нет желания углубить свои познания в wsdl ;)
 

vincent_vega

Green Team
02.04.2005
169
1
BIT
0
ну это версия wsdl-2, с 1-й он дружит прекрасно... но там нет половины того, что есть в этой... и хз как, что и куда надо поменять ;) нет желания углубить свои познания в wsdl ;)

Просто так этот вебсервис в лотус не затянуть. Не сможет он его корректно обработать. Поэтому попробуйте использовать какойто фреймворк. Вот например сгенерированные классы под axis2.
Посмотреть вложение n.zip
 
K

Klido

vincent_vega
чем порекомендуете сделать java-классы? есть эклипс, но под него axis плагины что-то не хотят работать...
 

vincent_vega

Green Team
02.04.2005
169
1
BIT
0
vincent_vega
чем порекомендуете сделать java-классы? есть эклипс, но под него axis плагины что-то не хотят работать...

можно из командной строки, но лучше как я советовал пользоваться soapUI (им пользуются даже бимеры)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!