Web Services
Web Services are usually defined as "A standard means of interoperating between different software applications, running on a variety of platforms and/or frameworks" [1]. While many possible mechanisms could be found to satisfy this definition, in practice Web Services today (April 2008) are commonly implemented using two XML protcols: SOAP - the actual message formatting protocol - and WSDL - the service definition protocol. Again, many low-level transmission mechanisms might be employed to facilitate the message exchange, but in practice almost all common implementations utilise the HTTP protocol and it's POST request.
Web Service Protocols
The "vanilla" XML SOAP+WSDL over HTTP web services implementation can be thought of as the core of an entire stack of protocols relating to web services.
Early visions for web services called for dynamic discovery of, and connection to, web services, details of which were to be located in a UDDI (Universal Description, Discovery and Integration - see also [2]) repository. More recently (as of April 2008) however, UDDI has faded from view as it has become increasingly clear that it was somewhat ahead of its time. As the web services environment matures it may re-emerge, or some other discovery mechanism might be implemented to take its place. Currently most web service connections are statically bound, not dynamically discovered.
There are also a whole raft of additional protocols (not all of which are strictly in the same class as formal protocols like SOAP and WSDL), usually beginning "WS-". Examples are WS-Reliability, WS-ReliableMessaging (these two are competing standards: the latter, backed by Microsoft and IBM, looks the likely winner), WS-Security, WS-Policy, and so on.
Don't worry if you have missed the latest emerging web service standard - there will be another one along in a minute!
VDF Implementation
Main article Web Service Basics
Within Visual DataFlex, Web Services are implemented through two mechanisms: one for creating services and the other for creating clients of existing services.
VDF Web Services
Visual DataFlex's Web Service mechanism relies on having Microsoft's IIS (Internet Information Services) running on the "server" machine. A service is developed by first creating a WebApp project (program) within the Workspace (if one does not already exist - it is always named "WebApp" and there can be only one such in any Workspace), then creating a Web Service object which will be deployed within it.
In the Web Service Object (which will have a source file extension of ".wo") you then create methods (Functions and/or Procedures), which you will subsequently publish as your service's operations.
By default Visual DataFlex publishes Document Style web services and unless you have a pressing reason to use the alternative (RPC Style) you should adhere to this (it can however be changed by setting pbDocumentStyle to False). This means that, except in the simplest cases (such as the much-cited example of serving up a stock price), you will need to define the documents which are to be passed to and from the service's operations. These are defined as extended data-types - structs and arrays - which can be combined to produce documents of arbitrary complexity.
VDF Web Service Clients
Web Service Clients are created in Visual DataFlex by creating a new class (New -> Class -> Client Web Service Class) and inserting the URL of the WSDL of the target service (which might be an Internet URl, or a file on your local machine or network). A class is then generated which acts as a Proxy (or Stub) for the service. Dragging an object of this class (usually from the Web Services section of the Class Palette) onto the component you are working on in the Designer view creates a object of the class, and through the class package defines all of the data types needed to interact with it. The service can then be invoked by calling the methods (functions and procedures) of the object as though it were the service itself (hence the Proxy terminology).
Further Topics
This article only covers the general subject of Web Services, however there are many further areas to explore which hopefully will be filled out in time.
- Synchronous vs. Asynchronous Web Services
- Web Service Granularity
- Loose Coupling
- Web Service Reliablility
- Web Service Security
- Web Service Management
- Web Service Orchestration
- Web Service Choreography
- Web Service Composition
- Web Service Taxonomies and Semantics