250 likes | 509 Views
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. A brief introduction. SOAP – Simple Object Access Protocol
E N D
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 Agni Software
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 Agni Software
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 Agni Software
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 Agni Software
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 Agni Software
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 Agni Software
DEMO: Simple Compression • Generic functions using ZLib in Delphi • Individual parameters are compressed/decompressed Agni Software
HTTP/1.1 200 OK Content-Type: text/xml Content-Length: 594 Content: <?xml version="1.0"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body SOAP-ENC:encodingStyle="http://schemas.xmlsoap.org/soap/envelope/"> <NS1:GetFileListResponse xmlns:NS1="urn:BinIntf-ISoapBinary"> <return xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:string[2]"> <item>file.doc.rtf</item> <item>file.rtf</item> </return> </NS1:GetFileListResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Datapacket compression • You may not want to compress every single parameter (int, string, etc.) • The datapacket itself is large: Agni Software
DEMO: Datapacket compression • Server • Use SoapPascalInvoker.AfterDispatchEvent • Client • Change HTTPRio.AfterExecute • Savings are in datapacket size Agni Software
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 Agni Software
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 Agni Software
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 Agni Software
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 Agni Software
Attachments: Advantages • SOAP Standard, so most SDKs will support it • Separate DATA from SOAP payload • Web server level control for saving/encrypting/compressing attachments Agni Software
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) Agni Software
SOAP Encryption standards • W3C is working on a standard for encryption • Recommendation available at:http://www.w3.org/TR/xmlenc-core/ Agni Software
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 Agni Software
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 Agni Software
Interoperability • Many toolkits support SOAP • Microsoft .NET • Borland Delphi • Apache SOAP • Interop problems are common • Parameters formatted incorrectly • Data type differences • Keywords Agni Software
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 Agni Software
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 Agni Software
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 Agni Software
Thank you Contact me at shenoy@agnisoft.com