Call a Web ServiceTag(s): WSH VBScript


We are calling the function put of a Web service.

This function takes 2 parameters: a string and a long.


' if the web services a user/pwd then you can try this :
' user = "myusername"
' pwd  = "mypassword"
' strUrl = "http://" & user & ":" & pwd & "@server.company.local/ws/utility"

strUrl = "http://server.company.local/ws/utility"

strRequest = "<env:Envelope  xmlns:env=""http://schemas.xmlsoap.org/soap/envelope/""" &_
             " xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""" &_
             " xmlns:soapenc=""http://schemas.xmlsoap.org/soap/encoding/""" &_
             " xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">" &_
             " <env:Header>" &_
             " </env:Header>" &_
             " <env:Body   env:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/"">" &_
             " <m:put  xmlns:m=""http://company.local""  >" &_
             " <string     xsi:type=""xsd:string"">testing</string>" &_
             " <longVal     xsi:type=""xsd:long"">1000</longVal>" &_
             "</m:put>" &_ 
             "</env:Body>" &_
             "</env:Envelope>"

dim http
set http=createObject("Microsoft.xmlhttp")
http.open "GET",strUrl,false
http.setRequestHeader "Content-Type","text/xml"

WScript.Echo "REQUEST : " & strRequest
http.send strRequest

If http.Status = 200 Then
    WScript.Echo "RESPONSE : " & http.responseXML.xml
else
    WScript.Echo "ERRCODE : " & http.status
End If
A typical REQUEST/RESPONSE looks like this :

REQUEST : 
<env:Envelope  xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<env:Header> </env:Header> 
<env:Body   env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
<m:put  xmlns:m="http://company.local"  > 
    <string     xsi:type="xsd:string">testing</string> 
    <longVal     xsi:type="xsd:long">1000</longVal> 
</m:put>
</env:Body></env:Envelope>


RESPONSE : 
<?xml version="1.0" standalone="yes"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
              xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
              xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<env:Header></env:Header>
<env:Body env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<m:putResponse xmlns:m="http://company.local"></m:putResponse>
ok
</env:Body>
</env:Envelope>

To parse a response, you use the XPath parser.

This example calls a list function and the function returns a value in the body response.

strUrl = "http://server.company.local/ws/utility"
strRequest = "<env:Envelope  xmlns:env=""http://schemas.xmlsoap.org/soap/envelope/""" &_
             "  xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""" &_
             "  xmlns:soapenc=""http://schemas.xmlsoap.org/soap/encoding/""" &_
             "  xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">" &_
             " <env:Header>" &_
             " </env:Header>" &_
             " <env:Body   env:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/"">" &_
             "  <m:list    xmlns:m=""http://company.local""> " &_
             "  </m:list>" &_
             " </env:Body>" &_
             " </env:Envelope>"

Dim http
Set http=CreateObject("Microsoft.xmlhttp")
http.Open "GET",strUrl,false
http.SetRequestHeader "Content-Type","text/xml"

WScript.Echo "REQUEST :" & strRequest
http.Send strRequest

If http.Status = 200 Then
   WScript.Echo "RESPONSE :" & http.responseXML.xml
   Set xmlDoc = CreateObject("Microsoft.XMLDOM") 'CreateObject("MSXML2.DOMDocument") 
   xmlDoc.SetProperty "ServerHTTPRequest", False
   xmlDoc.setProperty "SelectionLanguage", "XPath"
   xmlDoc.setProperty "SelectionNamespaces", "xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'"
    
   xmlDoc.async = False
   xmlDoc.loadXML(http.responseXML.xml)
   For Each x In xmlDoc.documentElement.childNodes
       WScript.Echo x.nodename & ": " & x.text
   Next
    
   set strResponse = xmlDoc.documentElement.selectSingleNode("//env:Body")

   WScript.Echo    
   WScript.Echo "** RESPONSE : " & strResponse.text
Else
   WScript.Echo "ERRCODE : " & http.status
End If
A typical REQUEST/RESPONSE looks like this :
REQUEST :
<env:Envelope  xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"  
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
               xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"  
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<env:Header> </env:Header> 
<env:Body   env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">  
<m:list    xmlns:m="http://intranet-ac.ssq.local">   </m:list> 
</env:Body> </env:Envelope>

RESPONSE :
<?xml version="1.0" standalone="yes"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<env:Header></env:Header>
<env:Body env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<m:listResponse xmlns:m="http://saac.ssq.local/commun">
    <result xsi:type="xsd:string">\\company.local\fonc_sas, \\company.local\unit_sas, \\company.local\prod_sas</result>
</m:listResponse>
</env:Body></env:Envelope>

env:Header: 
env:Body: \\company.local\fonc_sas, \\company.local\unit_sas, \\company.local\prod_sas

** RESPONSE : 
\\company.local\fonc_sas, \\company.local\unit_sas, \\company.local\prod_sas



blog comments powered by Disqus