Сериализация объекта полученного из Web сервиса

  • Автор темы Nikotin
  • Дата начала
N

Nikotin

Гость
#1
Ну вообщем встала задача обратиться из Лотуса к Веб сервису.
С обращением проблем особо не возникло.
Код:
Sub Test()
Dim Res As Variant
sWSDL="http://.../Service.asmx?WSDL"
Set Client =CreateObject("MSOSOAP.SoapClient30") 
Call Client.mssoapinit (sWSDL) 
CLient.ClientProperty("ServerHTTPRequest") = True
CLient.ConnectorProperty("Timeout") = 70000 
Set Res=Client.CeateArea("test", "test")
End Sub
И получаем объект Res, я знаю его структуру, но обращение из разряда X = Res.A выдают ошибку.
Соответственно есть 2 пути решения проблемы:
1.Возвращать переменные строго заданного типа, но это плохое решение.
2. Сериализовать полученный объект... и вот тут и встает вопрос КАК? На Jave вроде примеров много, но мне интересно узнать есть ли решение на Scripte?
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#2
простейшее, что приходит на ум - преобразовать нужные поля в разделенную строку, получить ее, распарсить и сформировать на этих значениях свой объект.
думаю, где-то так оно и работает :)
 
N

Nikotin

Гость
#3
думаю, где-то так оно и работает
Ну эт понятно =)
Но вопрос собственно говоря в чем...
Например используя XMLHTTP сервис вернет чистый XML , и его можно парсить Лотусинными средствами. На XMLHTTP , кстати и примеров побольше, так что попробую еще и на нем реализовать.
Но вот , что ворзвращает MS Soap? Я считаю что в нем(SOAP) есть какой то парсер его же объектов, а так как с веб сервисами раньше толком дела не имел, многое остается непонятно...
Вот можно например поподробней , что такое MS SoapReader? что это за COM такой?
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#4
сам соап не юзал.
подозреваю, что соап определяет автоматическую сериализацию/десериализацию

или то корба?.. короче, я тебя токо запутаю ))
 
N

Nikotin

Гость
#5
А можешь, тогда пример кода на XMLHTTP? Или ты не на нем писал?
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#6
не особо... некоторые тесты с ajax проводил только...
 
N

Nikotin

Гость
#7
Вообщем все оказалось просто :)

Так как дебагер Lotus'а не возвращал мне структуру объекта, я переписал все в обычный VB, и там уже посмотрел структуру полученного объекта. И понял что xml лежит вы Res.Context.xml. Ну распарсить данный xml - лекго, да и не моя задача :)
Получилось :
Код:
Dim Res As Variant
sWSDL=".../Service.asmx?WSDL"
Set Client =CreateObject("MSOSOAP.SoapClient30") 
Call Client.mssoapinit (sWSDL) 
CLient.ClientProperty("ServerHTTPRequest") = True
CLient.ConnectorProperty("Timeout") = 70000 
Set Res=Client.CeateArea("test", "test")
ResXml = Res.Context.xml
Msgbox ResXml
Всем спасибо