The killer differentiator is that for a given WSDL portType (or soon “interface” in WSDL 2.0) there is no implication that the portType is “implemented” by a specific class at the back-end. It might make sense for you to do that in certain situations, but at other times it might make sense for one operation in a portType to be handled by one computing system and another operation from the same portType to be processed by a completely different system.
That is, indeed, a good point I was not really aware of before.
Mark follows up with asking what a successful response to a message in “contract mode” would look like, and that an HTTP 200 response code would not have semantic meaning with regards to the message. Right, it doesn’t — that’s why the response code doesn’t matter as much as the response’s content itself, and why we have things such as WS-ReliableMessaging. You can maybe fault the WS community for misusing the HTTP application protocol as a transport protocol, but at least it’s done so consistently ;-)