VBScript tip: Web service client

December 3, 2014 | Reliance SCADA

In applications with Reliance as a part of a bigger whole, there are often requests for data exchange with other systems. For information on how to exchange data with third-party applications, read the Data Exchange Methods manual, which is part of the Reliance installation. One of these methods is a Web service. It is a system of type client–server intended for data exchange between two computers via SOAP. SOAP (Simple Object Access Protocol) is a protocol for exchanging XML-based messages over a network using HTTP.

If the Reliance system is the data source, you can take advantage of the fact that the data servers (Reliance Server and Reliance Control Server) can work as the Web service's server and provide data to clients. You can use the examples of client programs in Java, Delphi (Object Pascal), VB.NET, and Android (Java), which are part of the Reliance installation, to create your own client program.

If another program is to be the data source (the Web service server) and Reliance is to be the Web service client, using objects for XML and HTTP is one of the ways to connect to the server:

' Namespaces.
NS = "http://www.w3schools.com/webservices/"
NS_SOAP = "http://schemas.xmlsoap.org/soap/envelope/"
NS_SOAPENC = "http://schemas.xmlsoap.org/soap/encoding"
NS_XSI = "http://www.w3.org/2001/XMLSchema-instance"
NS_XSD = "http://www.w3.org/2001/XMLSchema"

' The URL of the Web service.
URL = "http://www.w3schools.com/webservices/tempconvert.asmx"

' The URL of the CelsiusToFahrenheit operation (function).
Dim Operation_CelsiusToFahrenheit
Operation_CelsiusToFahrenheit = "http://www.w3schools.com/webservices/CelsiusToFahrenheit"

' XML DOM objects.
Dim DOM, Envelope, Body, Operation, Param

' Creates an XML DOM object.
Set DOM = CreateObject("MSXML2.DOMDocument.6.0")

' Creates the main elements.
Set Envelope = DOM.createNode(1, "soap:Envelope", NS_SOAP)
Envelope.setAttribute "xmlns:soapenc", NS_SOAPENC
Envelope.setAttribute "xmlns:xsi", NS_XSI
Envelope.setAttribute "xmlns:xsd", NS_XSD
DOM.appendChild Envelope
Set Body = DOM.createElement("soap:Body")
Envelope.appendChild Body

' Creates an element for the CelsiusToFahrenheit function.
Set Operation = DOM.createNode(1, "CelsiusToFahrenheit", NS)
Body.appendChild Operation

' Creates an element for the Celsius parameter (passes a value of 33 °C).
Set Param = DOM.createNode(1, "Celsius", NS)
Param.Text = "33"
Operation.appendChild Param

' Releases the objects.
Set Param = Nothing
Set Operation = Nothing
Set Body = Nothing
Set Envelope = Nothing

' Creates an XML HTTP object for sending a request.
Set XMLHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
XMLHTTP.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
XMLHTTP.setRequestHeader "SOAPAction", Operation_CelsiusToFahrenheit
' Sends the request.
XMLHTTP.send DOM.xml

' Loads the response to the DOM object.
DOM.LoadXML XMLHTTP.responseXML.xml

' Releases the object.
Set XMLHTTP = Nothing

' XML DOM objects.
Dim NodeList, Element

' Searches for the CelsiusToFahrenheitResult object, which contains the value in degrees Fahrenheit.
Set NodeList = DOM.getElementsByTagName("*")
For Each Element in NodeList
  If Element.tagName = "CelsiusToFahrenheitResult" Then
    MsgBox "Fahrenheit: " & Element.Text
    Exit For
  End If

' Releases the objects.
Set Element = Nothing
Set NodeList = Nothing
Set DOM = Nothing


33 degrees Celsius is equal to 91.4 degrees Fahrenheit. The value was acquired using a Web service running on www.w3schools.com.

Note: Each Web service will have a different URL, different namespaces, and different names and URLs of operations. To connect to a Web service, this information must be adjusted accordingly.

Reliance Earth Icon