(ODBC). This allowed any client that could speak ODBC to access any database server that could speak ODBC. N OT E David Wheeler, a chief architect for the EDSAC project in the early 1950s, said, Any problem in computer science can be solved with another layer of indirection. Wise words! And written back at the origins of computer science. This worked for a while, and newer layers of indirection were developed, such as OLEDB and JDBC. But while this approach proved very successful, it served a limited audience. Providing these useful indirection layers took considerable industry support. This meant that as software developers working within a single organization, we had difficulty creating servers that could easily interoperate with numerous, diverse clients. If we wanted to create some code with functionality that could be invoked by another machine, we were in for a difficult time. A few technologies evolved to assist developers, including DCOM from Microsoft, CORBA from the Object Management Group, and, later, RMI from Sun Microsystems. These new technologies were fairly good . . . as long as you were com- municating with other systems using the same platformand even that could be rough. How many of you tried to make DCOM talk to CORBA? How about making CORBA talk to DCOM? Or DCOM talk to RMI? And how many of you tried to make CORBA talk to CORBA? Yep, even that could be hard. No matter how you sliced it, getting a Microsoft Windows machine to talk to a Unix machine in any meaningful way was a headache. Thus, the introduction of XML Web services. Like the technologies before it, XML Web services are a layer of indirection. This time, however, the method of invoking functionality on another machine is done through plain text using standard W3C protocols. In one significant way, this is a step backwardbinary protocols can be much faster than an XML Web service. This disadvantage, though, is more than made up for by the ease with which different platforms can communicate with one another. This benefit is simple to demonstrate using Visual Studio .NET. You can create a project that references code running on a Linux machine in some guys garage in Peoria in just a few steps. Literally in minutes, you can cre- ate a meaningful application that is actively running code and receiving data on a machine running an entirely different operating system. Now that youve seen what XML Web services can do, how do you use them? In reality, Web services are nothing more than code running on someones platform that has an entry point allowing you to activate that code using a special XML document. In the most common case, youre 2 Chapter 1