Using COM and SOAP to get temperature at XMethods
Posted: Mon Dec 20, 2004 1:53 pm
				
				To promote the use of ActiveX and of Axend's InterfaceGenerator, I post here a small example how to use the pocketSOAP component that can be downloaded from http://www.pocketsoap.com/ The example retrieves the temperature from the http://services.xmethods.net:80/soap/servlet/rpcrouter site
For some reason the ComLib of Axend does not work with CreateObject("pocketSOAP.HTTPTransport.2") (it crashes), so I used the CoCreateInstanceEx instead.
The generated interface pSoap32.pb
The actual program
			For some reason the ComLib of Axend does not work with CreateObject("pocketSOAP.HTTPTransport.2") (it crashes), so I used the CoCreateInstanceEx instead.
The generated interface pSoap32.pb
Code: Select all
; Interface generated by Interface Generator 1.0, Date 12/10/2004 
; PocketSOAP, PocketSOAP 1.5.0 Type Library
; Enumerations
Enumeration ; sfConfigOptions
  #sfcNormal_11 = 0
  #sfcScripting_11 = 1
  #sfcNormal_12 = 2
  #sfcScripting_12 = 3
EndEnumeration
Enumeration ; pocketSOAPErrors
  #E_SOAPFAULT = -2147204607
  #E_NOFAULTCODE = -2147204606
  #E_NOFAULTSTRING = -2147204605
  #E_DONT_UNDERSTAND = -2147204604
  #E_INVALID_ARRAY_POS = -2147204592
  #E_ARRAY_COORD_FORMAT = -2147204591
  #E_NO_DESERIALIZER = -2147204576
  #E_NO_SERIALIZER = -2147204560
  #E_ATTR_SIMPLE_ONLY = -2147204559
  #E_DESER_NO_SIMPLE = -2147204558
  #E_PARSE_ERROR = -2147204544
  #E_UNKNOWN_PRIMARYSCHEMA = -2147204528
  #E_INVALID_LEX_REP = -2147204512
EndEnumeration
Enumeration ; pocketSOAPHttpErrors
  #E_SSL_FAILURE = -2147204351
  #E_DEFLATE_FAILURE = -2147204350
  #E_INFLATE_FAILURE = -2147204349
EndEnumeration
; Interfaces
Interface ISOAPEnvelope Extends IUnknown
  get_ThrowFaults(a)
  put_ThrowFaults(a)
  get_URI(a)
  put_URI(a)
  get_MethodName(a)
  put_MethodName(a)
  get_EncodingStyle(a)
  put_EncodingStyle(a)
  SetMethod(a,b)
  Parse(a,b,c,d,e)
  Serialize(a)
  get_Headers(a)
  get_Body(a)
  get_Parameters(a)
  get_SerializerFactory(a)
  putref_SerializerFactory(a)
EndInterface
Interface ISOAPNodes Extends IUnknown
  get__NewEnum(a)
  get_Item(a,b)
  get_ItemByName(a,b,c)
  get_Count(a)
  Append(a)
  Clear()
  Create(a,b,c,d,e,f,g,h,i)
EndInterface
Interface ISOAPNode Extends IUnknown
  get_Name(a)
  put_Name(a)
  get_Namespace(a)
  put_Namespace(a)
  get_Type(a)
  put_Type(a)
  get_TypeNS(a)
  put_TypeNS(a)
  get_Value(a)
  put_Value(a,b,c,d)
  get_ValueAs(a,b,c)
  putref_SerializerFactory(a)
  get_root(a)
  get_id(a)
  get_href(a)
  get_actor(a)
  get_mustUnderstand(a)
  get_offset(a)
  get_position(a)
  get_nil(a)
  put_root(a)
  put_id(a)
  put_href(a)
  put_actor(a)
  put_mustUnderstand(a)
  put_offset(a)
  put_position(a)
  put_nil(a)
  get_Nodes(a)
EndInterface
Interface ISerializerFactoryConfig Extends IUnknown
  ElementMapping(a,b,c,d)
  Deserializer(a,b,c,d,e,f,g,h)
  Serializer(a,b,c,d,e,f,g)
  get_PrimarySchema(a)
  put_PrimarySchema(a)
  get_RootFirst(a)
  put_RootFirst(a)
  SetConfig(a,b,c,d)
EndInterface
Interface ISOAPNamespaces Extends IUnknown
  GetPrefixForURI(a,b)
  GetURIForPrefix(a,b)
EndInterface
Interface ISOAPEnvelope2 Extends ISOAPEnvelope
  get_EnvelopeVersion(a)
  put_EnvelopeVersion(a)
EndInterface
Interface ISOAPTransport Extends IUnknown
  Send(a,b)
  Receive(a,b)
EndInterface
Interface IHTTPTransport Extends ISOAPTransport
  get_SOAPAction(a)
  put_SOAPAction(a)
EndInterface
Interface IHTTPTransportAdv Extends IHTTPTransport
  put_Timeout(a)
  get_Timeout(a)
  SetProxy(a,b)
  NoProxy()
  Authentication(a,b)
  ProxyAuthentication(a,b)
  get_StatusCode(a)
  get_MaxRedirectDepth(a)
  put_MaxRedirectDepth(a)
EndInterface
Interface ISOAPTransport2 Extends IUnknown
  Send(a,b,c,d,e)
  Receive(a,b)
EndInterface
Interface ISwATransport Extends IUnknown
  get_ContentType(a)
  put_ContentType(a)
  Send(a,b,c,d,e)
  Receive(a,b)
EndInterface
Interface ISOAPTransportTimeout Extends ISOAPTransport
  put_Timeout(a)
  get_Timeout(a)
EndInterface
Interface IHTTPTransportAdv2 Extends IHTTPTransportAdv
  get_Option(a,b)
  put_Option(a,b,c,d,e)
EndInterface
Interface ISOAPNode2 Extends ISOAPNode
  get_EncodingStyle(a)
  put_EncodingStyle(a)
EndInterface
Interface ISOAPNode3 Extends ISOAPNode2
  get_explicitRoot(a)
  put_explicitRoot(a)
EndInterface
Interface ISOAPNode12 Extends IUnknown
  get_role(a)
  put_role(a)
  get_relay(a)
  put_relay(a)
  get_ref(a)
  put_ref(a)
EndInterface
Interface ISerializerFactory Extends IUnknown
  SerializerForValue(a,b)
  SerializerForNode(a,b)
  ReturnSerializer(a)
  DeserializerForType(a,b,c,d)
  DeserializerForElement(a,b,c,d)
  ReturnDeSerializer(a)
  XsiForPrimaryNS(a)
  IsAnyType(a,b,c)
  AreEqualComTypes(a,b,c,d,e)
  FindComType(a,b,c)
EndInterface
Interface ISoapSerializer Extends IUnknown
  Serialize(a,b,c)
EndInterface
Interface ISerializerContext Extends IUnknown
  get_Namespaces(a)
  get_SerializerFactory(a)
EndInterface
Interface ISerializerOutput Extends IUnknown
  StartElement(a,b)
  EndElement(a,b)
  Attribute(a,b,c)
  QNameAttribute(a,b,c,d)
  SerializeNode(a)
  SerializeValue(a,b,c)
  WriteText(a)
  WriteTextNoEncoding(a)
EndInterface
Interface ISoapDeSerializer Extends IUnknown
  Start(a,b,c,d)
  Child(a,b,c)
  ChildReady(a,b)
  ChildRef(a,b)
  ref(a,b)
  Characters(a)
  End()
EndInterface
Interface ISoapDeSerializerAttributes Extends IUnknown
  Exists(a,b,c)
  Value(a,b,c)
EndInterface
Interface ISerializerFactoryConfig2 Extends ISerializerFactoryConfig
  LocalTypeMapping(a,b,c,d,e,f)
EndInterface
Interface ISerializerFactory2 Extends ISerializerFactory
  DeserializerForChild(a,b,c,d,e,f,g,h)
EndInterface
Interface ISerializerFactoryPool Extends IUnknown
  Reset()
EndInterface
Interface ISerializerFactoryPool2 Extends ISerializerFactoryPool
  Fetch(a,b)
EndInterface
Interface ISerializerFactoryEx Extends IUnknown
  SerializerForValue(a,b,c,d,e,f,g,h)
  SerializerForNode(a,b,c,d,e,f)
  ReturnSerializer(a)
  DeserializerForType(a,b,c,d)
  DeserializerForElement(a,b,c,d,e,f,g,h)
  ReturnDeSerializer(a)
  FindType(a,b,c,d,e,f)
  XsiForPrimaryNS(a)
  IsAnyType(a,b,c)
  AreEqualComTypes(a,b,c,d,e)
  FindComType(a,b,c)
EndInterface
Interface ISerializerFactoryConfig3 Extends ISerializerFactoryConfig2
  understoodHeader(a,b)
EndInterface
Interface ITypesInit Extends IUnknown
  Initialize(a,b,c,d,e,f)
EndInterface
Interface ISimpleSoapSerializer Extends IUnknown
  Serialize(a,b,c)
EndInterface
Interface IXmlQName Extends IUnknown
  get_Name(a)
  put_Name(a)
  get_Namespace(a)
  put_Namespace(a)
  Set(a,b)
EndInterface
Interface IInterfaceFinder Extends IUnknown
  DefaultIID(a,b)
EndInterface
Interface ISerializerOutput2 Extends ISerializerOutput
  SerializeAttribute(a,b,c)
EndInterface
Interface ISoapDeSerializerAttributes2 Extends ISoapDeSerializerAttributes
  ValueAs(a,b,c,d,e)
EndInterface
Interface ISerializerContext2 Extends ISerializerContext
  get_EnvelopeVersion(a)
EndInterface
Interface IHTTPTransportDisp Extends IUnknown
  Send(a,b,c,d,e)
  Receive(a,b)
  get_SOAPAction(a)
  put_SOAPAction(a)
  put_Timeout(a)
  get_Timeout(a)
  SetProxy(a,b)
  NoProxy()
  Authentication(a,b)
  ProxyAuthentication(a,b)
  get_StatusCode(a)
  get_MaxRedirectDepth(a)
  put_MaxRedirectDepth(a)
  get_Option(a,b)
  put_Option(a,b,c,d,e)
EndInterface
Interface ISOAPNodeDisp Extends IUnknown
  get_Name(a)
  put_Name(a)
  get_Namespace(a)
  put_Namespace(a)
  get_Type(a)
  put_Type(a)
  get_TypeNS(a)
  put_TypeNS(a)
  get_Value(a)
  put_Value(a,b,c,d)
  get_ValueAs(a,b,c)
  putref_SerializerFactory(a)
  get_root(a)
  get_id(a)
  get_href(a)
  get_actor(a)
  get_mustUnderstand(a)
  get_offset(a)
  get_position(a)
  get_nil(a)
  put_root(a)
  put_id(a)
  put_href(a)
  put_actor(a)
  put_mustUnderstand(a)
  put_offset(a)
  put_position(a)
  put_nil(a)
  get_Nodes(a)
  get_EncodingStyle(a)
  put_EncodingStyle(a)
  get_explicitRoot(a)
  put_explicitRoot(a)
  get_role(a)
  put_role(a)
  get_relay(a)
  put_relay(a)
  get_ref(a)
  put_ref(a)
EndInterface
Code: Select all
XIncludeFile "pSoap32.pb"
Result.l = CoCreateInstance_(?CLSID_CoEnvelope,0,1,?IID_ISOAPEnvelope,@oEnvelope.ISOAPEnvelope) 
;oEnvelope.ISOAPEnvelope = CreateObject("pocketSOAP.Envelope.2")
Result=oEnvelope\SetMethod ( Ansi2Uni("getTemp"), Ansi2Uni("urn:xmethods-Temperature"))
pNodes.l
Result=oEnvelope\get_Parameters(@pNodes)
zip.VARIANT 
zip\vt = #VT_BSTR 
zip\bstrVal = Ansi2Uni("94107")
*zip.pToVariant=zip
 
*oNodes.ISOAPNodes=pNodes
Result=*oNodes\Create(Ansi2Uni(""),*zip\a,*zip\b,*zip\c,*zip\d,0,0,0,0)
Result=*oNodes\Release()
Result.l =CoInitialize_(0)
Result.l = CoCreateInstance_(?CLSID_HTTPTransport,0,1,?IID_IHTTPTransport,@oHTTP.IHTTPTransport) 
;oHTTP.IHTTPTransport = CreateObject("pocketSOAP.HTTPTransport.2")
Result=oHTTP\put_SOAPAction(Ansi2Uni(""))
Envelope=AllocateMemory(5000)
Result=oEnvelope\Serialize(@Envelope)
Result=oHTTP\Send ( Ansi2Uni("http://services.xmethods.net:80/soap/servlet/rpcrouter"), Envelope )
voHTTP.VARIANT
voHTTP\vt = #VT_UNKNOWN
voHTTP\value=oHTTP
*voHTTP.pToVariant = voHTTP
oEnvelope\Parse(*voHTTP\a, *voHTTP\b, *voHTTP\c, *voHTTP\d, Ansi2Uni(""))
oNodes.l
Result=oEnvelope\get_Parameters(@oNodes)
*oNodes.ISOAPNodes=oNodes
oNode.l
Result=*oNodes\get_Item(0, @oNode)
*oNode.ISOAPNode=oNode
v.VARIANT
*v.pToVariant = v
*oNode\get_Value(@v)
BSTR.VARIANT
Result=VariantChangeType_(@BSTR,@V,0,#VT_BSTR)
h.f=48.0
MessageRequester("Temperature in Fahrenheit",Uni2Ansi(BSTR\value),0)
DataSection
  CLSID_HTTPTransport:
  Data.l $D76BA06F
  Data.w $ABF3,$4c1f
  Data.b $BD,$C9,$18,$48,$D4,$E3,$CF,$2B
EndDataSection
DataSection
  IID_IHTTPTransport:
  Data.l $C2F39358
  Data.w $2B60,$4FDA
  Data.b $B6,$FC,$E9,$5D,$CC,$4E,$9C,$9B
EndDataSection
DataSection
  CLSID_CoEnvelope:
  Data.l $e2e0fb24
  Data.w $e58f,$458f
  Data.b $84,$e0,$6e,$09,$d2,$d5,$15,$11
EndDataSection
DataSection
  IID_ISOAPEnvelope:
  Data.l $8b2091b1
  Data.w $dcf9,$44a7
  Data.b $a5,$0b,$f0,$29,$71,$a0,$1b,$f1
EndDataSection