Tip pro VBScript: Klient webové služby
3. prosince 2014 | Reliance SCADA
V aplikacích, kde je systém Reliance provozován jako část většího celku, se často objevuje požadavek na výměnu dat s jinými systémy. Řada způsobů výměny dat s aplikacemi třetích stran je popsána v příručce, která je součástí instalace systému Reliance. Jedním z nich je webová služba, tj. systém typu klient–server pro výměnu dat mezi dvěma počítači protokolem SOAP. SOAP (Simple Object Access Protocol) je protokol pro výměnu zpráv založených na XML přes síť pomocí HTTP.
Pokud je zdrojem dat systém Reliance, lze využít toho, že datové servery (Reliance Server a Reliance Control Server) mohou pracovat v roli serveru webové služby a poskytovat data klientům. Ukázkové příklady klientských programů v jazycích Java, Delphi (Object Pascal), VB.NET, Android (Java) jsou součástí instalace systému Reliance a lze podle nich vytvořit vlastní klientský program.
V případě, že zdrojem dat (serverem webové služby) má být jiný program a systém Reliance má být klientem webové služby, pak jednou z možností, jak se k serveru připojit, je použití objektů pro XML a HTTP:
' Obory názvů (namespace).
Dim NS, NS_SOAP, NS_SOAPENC, NS_XSI, NS_XSD
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"
' URL webové služby.
Dim URL
URL = "http://www.w3schools.com/webservices/tempconvert.asmx"
' URL operace (funkce) CelsiusToFahrenheit.
Dim Operation_CelsiusToFahrenheit
Operation_CelsiusToFahrenheit = "http://www.w3schools.com/webservices/CelsiusToFahrenheit"
' Objekty XML DOM.
Dim DOM, Envelope, Body, Operation, Param
' Vytvoří objekt XML DOM.
Set DOM = CreateObject("MSXML2.DOMDocument.6.0")
' Vytvoří hlavní elementy.
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
' Vytvoří element funkce CelsiusToFahrenheit.
Set Operation = DOM.createNode(1, "CelsiusToFahrenheit", NS)
Body.appendChild Operation
' Vytvoří element parametru Celsius (předá hodnotu 33 °C).
Set Param = DOM.createNode(1, "Celsius", NS)
Param.Text = "33"
Operation.appendChild Param
' Uvolní objekty.
Set Param = Nothing
Set Operation = Nothing
Set Body = Nothing
Set Envelope = Nothing
' Vytvoří objekt XML HTTP pro odeslání dotazu.
Dim XMLHTTP
Set XMLHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
XMLHTTP.Open "POST", URL, False
XMLHTTP.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
XMLHTTP.setRequestHeader "SOAPAction", Operation_CelsiusToFahrenheit
' Odešle dotaz.
XMLHTTP.send DOM.xml
' Odpověď načte do objektu DOM.
DOM.LoadXML XMLHTTP.responseXML.xml
' Uvolní objekt.
Set XMLHTTP = Nothing
' Objekty XML DOM.
Dim NodeList, Element
' Vyhledá objekt CelsiusToFahrenheitResult, který obsahuje hodnotu ve stupních Fahrenheita.
Set NodeList = DOM.getElementsByTagName("*")
For Each Element in NodeList
If Element.tagName = "CelsiusToFahrenheitResult" Then
MsgBox "Fahrenheit: " & Element.Text
Exit For
End If
Next
' Uvolní objekty.
Set Element = Nothing
Set NodeList = Nothing
Set DOM = Nothing
33 stupňů Celsia odpovídá 91,4 stupňům Fahrenheita. Hodnota byla získána pomocí webové služby běžící na serveru www.w3schools.com.
Poznámka: Každá webová služba bude mít jinou URL, jiné obory názvů a jiné názvy a URL operací. To jsou údaje, které musí být pro připojení k webové službě příslušně upraveny.