Object-Oriented Programming Without "Owning" the Object
Although the introduction for this chapter said we should think of Web services in terms of objects, it doesn't mean that we can consider creating Web services to be full-blown object-oriented programming. As we mentioned earlier, the performance hit you would take by constantly sending messages back and forth could be catastrophic.
In our EsteemBooster example, we created simple classes that grouped data together for the purpose of sending and receiving data. These classes didn't actually do anything on their own; they were only containers. By providing these containers, we can send and receive chunks of data all at one time. In fact, you could even exchange arrays of these objects if you wanted to. Think of results from a product search, where you have some product container, and each one in the array has the name, price, and so on.
The individual methods marked with the WebMethod attribute do actual work. When consumed, these methods are a lot like calling static methods in your own classes (though to do so, you still need to create an instance of the proxy class). Because of the proxy class, it's like having the class available to you as if it were your own.