- From: Roberto Chinnici <Roberto.Chinnici@Sun.COM>
- Date: Tue, 13 Jul 2004 18:22:29 -0700
- To: Jim Webber <Jim.Webber@newcastle.ac.uk>
- Cc: www-ws-desc@w3.org
Jim Webber wrote: > Roberto, > > >>Here's the issue as I see it: the WSDL author went as far as >>to define several operations on an interface. Operations >>partition the set of all valid message exchanges >>(interactions) with a service in disjoint subsets. If one >>interface can define two operations, >>O1 and O2, that use the same MEP and both have signature A->B >>(i.e. they take an A and return a B), then the combination of >>the actual messages "a" and "b" as transmitted doesn't tell >>the whole story. In general, you need the "operation name" to >>be transmitted. (Maybe there is some rule that says "if the >>value X is > 1000 it's O1, otherwise it's O2", as Gudge >>offered. But then the culprit seems to be the insufficiently >>powerful type system used to define A, since it merged two >>disjoint types into one: >>in reality, O1 and O2 have different signatures.) > > > The first thing we have to learn is that O1 and O2 don't really exist. > Web Services don't really support operations (as you noted) just the > exchange of messages. > > Once we're past that hurdle we are down to a problem of dispatch. Given > a message with particular structure and content, where do I shove it in > my back end? > > That is service-specific, and is therefore out of scope for WSDL. > > Of course I sympathise with the fact that at the application level, some > will want to turn this message exchange into something like: > > interface WS > { > X foo(Y y); > W foo(Y y) > } // obviously wrong > > But though familiar and comfortable, that is not a true reflection of > what's happening, which is more like: > > interface WS > { > Message foo(Message); > } > > Where we are left to our own devices to marry this up with our > application-specific needs. Good! But then define just one operation, <operation name="doesitall"> <input element="#any"/> <output element="#any"/> </operation> and you're done. You can use types more specific than #any if you want, I don't mind at all. Internally, you can do what you want, have any number of operations, or use something else entirely, I'm OK with that. But if you partition the set of possible exchanges in buckets, advertise that fact prominently in the WSDL and then tell to an innocent bystander like me "Nope, just kidding! See? There are no buckets, no matter how close you look!", well, that sounds like cheating. Operations exist, because _you_ put them in the WSDL _you_ published. Roberto
Received on Tuesday, 13 July 2004 21:20:43 UTC