Transcript Document
Advanced Web Services Deepak Shenoy Agni Software http://www.agnisoft.com Contents • • • • • Binary data transfer Attachments Compression Encryption Interoperability with web services written in other languages • Headers 7/16/2015 Agni Software 2 A brief introduction • SOAP – Simple Object Access Protocol • WSDL – Web Service Description Language • “Remote method invocation” using XML datapackets – Industry standard – platform independent – language independent – Object oriented structure 7/16/2015 Agni Software 3 Binary Transfer • Transfer of binary data over SOAP • What we will see: – A binary array of bytes (TByteDynArray) sent over the wire – Files sent to the server from a client, and downloaded back again. – Delphi code for the webservice and the client 7/16/2015 Agni Software 4 DEMO • Binary Transfer demo – Server • Simple server interface passing TByteDynArrays • Reason for GetSOAPWebModule • Critical section required for global array access – Client • Convert from file to TByteDynArray and back 7/16/2015 Agni Software 5 Real world enhancements • Files as TByteDynArray: store in database or as server files instead • Convert Web App Debugger to ISAPI DLL • Synchronize access to the Global FileList • Compression: save data transfer time by compression of datapackets 7/16/2015 Agni Software 6 Compression • SOAP Data is sent in XML (character format) • Binary data is encoded into text to be sent • Size can be reduced by compressing the binary document • Simple compression: – Compress before send – Decompress on receive 7/16/2015 Agni Software 7 DEMO: Simple Compression – Generic functions using ZLib in Delphi – Individual parameters are compressed/decompressed 7/16/2015 Agni Software 8 HTTP/1.1 200 OK Content-Type: text/xml Datapacket Content-Length: 594 Content: compression • You may not <SOAP-ENV:Envelope want to compressxmlns:SOAPevery <?xml version="1.0"?> ENV="http://schemas.xmlsoap.org/soap/envelope/" single parameter (int, string, etc.) xmlns:xsd="http://www.w3.org/2001/XMLSchema" • The datapacket itself is large: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body SOAPENC:encodingStyle="http://schemas.xmlsoap.org/soap/envelope/" > <NS1:GetFileListResponse xmlns:NS1="urn:BinIntfISoapBinary"> <return xsi:type="SOAP-ENC:Array" SOAPENC:arrayType="xsd:string[2]"> <item>file.doc.rtf</item> <item>file.rtf</item> </return> </NS1:GetFileListResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 7/16/2015 Agni Software 9 DEMO: Datapacket compression • Server –Use SoapPascalInvoker.AfterDispatchEvent • Client –Change HTTPRio.AfterExecute • Savings are in datapacket size 7/16/2015 Agni Software 10 Datapacket compression gotchas • Server to client communication is fine – but extra processing is required for each call • Client to server communication –Use “Before” events – HTTPRio.BeforeExecute on the client, SoapPascalInvoker.BeforeDispatchEvent on the server –Compress on the client –Decompress on the server 7/16/2015 Agni Software 11 Using HTTP Headers • Handle both compressed and uncompressed requests on the server (or responses on the client) • Add an HTTP Header indicating that a datapacket is compressed – Server: Use “Response.AddCustomHeaders” to add your own headers. – Client: Use HTTPAddRequestHeaders. • HTTP Handle is not exposed in code • Change the Delphi Source Code to expose it 7/16/2015 Agni Software 12 Attachments • Binary data may not need to be part of the SOAP packet itself • SOAP Attachments: Standard available in SOAP 1.1 • Attachment data arrives in a separate part of the transport packet • In HTTP: “Multipart” messages are used • Delphi uses MIME encoding in attachments 7/16/2015 Agni Software 13 DEMO: Attachments • Only need to use the TSOAPAttachment class • Persist the attachment file after retrieval using the CacheFilePersist property • Attachments are saved to Windows Temp folder by default – Change THTTPSoapDispatcher.Dispatcher.Converter. TempDir to override 7/16/2015 Agni Software 14 Attachments: Advantages • SOAP Standard, so most SDKs will support it • Separate DATA from SOAP payload • Web server level control for saving/encrypting/compressing attachments 7/16/2015 Agni Software 15 SOAP Encryption • Encrypt data to avoid parameter exposure through wire taps • You can use HTTPS (Secure) to encrypt data – No code changes required • Encrypt SOAP payloads using code – Parameter level – Datapacket level – (Code similar to compression code) 7/16/2015 Agni Software 16 SOAP Encryption standards • W3C is working on a standard for encryption • Recommendation available at: http://www.w3.org/TR/xmlenc-core/ 7/16/2015 Agni Software 17 SOAP Headers • SOAP data goes under the <SOAP:Body> tag in the datapacket • <SOAP:Header> is now available for you to add custom headers • Better than HTTP Headers – Usable on any transport – Standardized: part of SOAP 1.1 • Delphi 7 supports SOAP Headers 7/16/2015 Agni Software 18 DEMO: SOAP Headers • ISOAPHeaders interface supports adding and retrieving of headers • Server: Create classes inherited from TSOAPHeader for custom headers • Client: Cast HTTPRio to ISOAPHeaders to access header information 7/16/2015 Agni Software 19 Interoperability • Many toolkits support SOAP – Microsoft .NET – Borland Delphi – Apache SOAP • Interop problems are common – Parameters formatted incorrectly – Data type differences – Keywords 7/16/2015 Agni Software 20 Interoperability • Interop Lab: catalog of problems between SOAP implementations – http://www.whitemesa.com/interop.htm – Delphi SOAP has entries there • Big issues with Interop – Namespaces, Complex types – Headers, Attachments – RPC|Encoded vs. Document|Literal 7/16/2015 Agni Software 21 RPC|Encoded vs. Document|Literal • Delphi servers only understand RPC|Encoded requests • Delphi Clients can access both types of servers • Literal parameters: soLiteralParams in Converter options • Invoke options: – ioDocument: Document rules apply – ioLiteral: no “unwinding” • WSDL Importer works well by default 7/16/2015 Agni Software 22 New and upcoming areas • UDDI : Universal Description, Discovery and Integration (Webservice “directory”) • WSIL: Web Service Inspection Language • Other transports: SMTP, FTP etc. • SOAP 1.2 will soon be up 7/16/2015 Agni Software 23 Thank you Contact me at [email protected]