Web services offer a standard method of communication that is independent of language and platform. Using Web services, we can make a call to another system regardless of the platform on which it runs. The data is marshaled and tagged in XML, and the call is made across platform and operating system. As Figure 11.10 illustrates, we can use Web services to achieve interoperability between WebSphere, .Net, and LAMP applications. This can be achieved at quite small levels of granularity, such as a function call, or large levels, such as a file of purchase orders. Web services can be asynchronous or synchronous. Asynchronous calls allow for loosely coupled systems, particularly combined with document- style XML to allow transfer of large quantities of related data. The simplest form of Web service is XML-RPC. XML-RPC may be the best choice for internal use and rapid development. SOAP is a more elaborate standard, with more features and choices. SOAP is more likely to be used for industry standards or interbusiness communication. All of the open source languages have good support for Web services. For simple communication, replacing socket programming and screen scraping, particularly in internal applications, Web services work very well. It is still difficult to use them for interbusiness development. Many of the standards at higher levels are not really ready yet. Encryption, standards for interorganization communication, and security all have to be addressed. To solve the integration engine scenarios using Web services, we develop our own code to address the specific problem or problems we are facing, using XML and queuing if appropriate. If the problem is somewhat generalized, such as many customers or vendors, we develop a general solution to the problem on a hub and spoke basis. It is very unusual for such a solution to be more expensive and difficult than using the integration engine, and, of course, it will use the standard development tools and database of our organization. Figure 11.11 shows the previous distribution company example. The relationship between the three entities (distributor, corporate, and retail) is loosely coupled using XML files passed variously by mail and file transfer (FTP). The XML schemata differ for different documents (purchase orders, invoices), as we might expect, and also, unfortunately, for different retailers. The largest challenge, as often in long-running transactional systems, is tying related documents together. We rely on lookup against the ERP system to do this.