(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  platform—and  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  backward—binary  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