As always, a great post from Jim: “From Objects, through Components, to Web Services”.
I have to clarify that my discussion with Jim Gray, to which Jim referred, was not about architectural styles but rather about the usefulness and appropriateness of tools that hide the use of services and present a view (object-oriented in nature in the case of ASMX) which is familiar to the developer. I totally see his point of view since he and the people he works with build large systems (e.g., TerraServer, SkyServer) and they don’t want to spend the time and energy required to deal with the messages exchanged.
It is difficult to say anything against that. Yes, there may be some coupling between the implementation and the service contract but the alternative for these developers would have been huge XML Schema documents written by hand and XML message processing. At least that’s the way developers of such systems see it.
Of course the alternative, message-oriented approach suggests that loose coupling and evolution are easier to achieve. I subscribe to this view but how can we persuade people who have already built large systems using this approach that this is the case when we don’t have equivalent systems to prove our case? This is a difficult one.
Furthermore, how to compare implementation approaches? And, how do we scientifically compare RPC-style, object-oriented (a la WS-RF) approaches, and service-oriented approaches when building distributed systems? I have some ideas that I am working on. This should be interesting.