- From: Martin Gudgin <mgudgin@microsoft.com>
- Date: Wed, 14 Jul 2004 00:15:38 -0700
- To: "Roberto Chinnici" <Roberto.Chinnici@Sun.COM>, "Jim Webber" <Jim.Webber@newcastle.ac.uk>
- Cc: <www-ws-desc@w3.org>
> -----Original Message----- > From: www-ws-desc-request@w3.org > [mailto:www-ws-desc-request@w3.org] On Behalf Of Roberto Chinnici > Sent: 14 July 2004 02:22 > To: Jim Webber > Cc: www-ws-desc@w3.org > Subject: Re: Action Item 2004-07-01 Solution to 168/R114 > > > 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> But that doesn't describe my service. I accept message X and emit messages Y and Z. #any is way too loose. > > 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. I'm with Jim. I think operations are an illusion. All they are is a *WSDL level* construct for grouping messages in an exchange. The fact that when using RPC style the messages exchanges are typically In-Out with different input and output messages for each operation does not mean that all message exchanges look like that. Gudge
Received on Wednesday, 14 July 2004 03:16:17 UTC