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]