W3C home > Mailing lists > Public > xml-dist-app@w3.org > February 2003

RE: concatenating web services

From: Don Box <dbox@microsoft.com>
Date: Mon, 10 Feb 2003 08:23:01 -0800
Message-ID: <57EF69AF56D92148984EDA3174082945040F9936@RED-MSG-10.redmond.corp.microsoft.com>
To: "Rand Anderson" <randerson@macgregor.ws>
Cc: <xml-dist-app@w3.org>

> -----Original Message-----
> From: Rand Anderson [mailto:randerson@macgregor.ws]
> Sent: Monday, February 10, 2003 8:03 AM
> To: Don Box
> Cc: xml-dist-app@w3.org
> 
> Hi Don,
> Thanks for commenting on this.
> 
> I do understand that the purpose of WS-Routing is for defining a
routing
> mechanism ;).
> 
> My question, or I guess it was more than a question, it was a
suggestion,
> was that the intermediaries can do more than blindly pass the message
on.
> That certainly has value by itself (e.g., for mixing transports along
the
> way), but allowing the intermediaries to do something 'interesting' to
the
> message contents along the way holds the power of enabling a
decentralized
> form of simple orchestration, a pipelining. And it parallels many
real-
> world
> semantics of process flow.
> 
> Of course, I was just exploring what seemed to be some interesting
ground
> here...Are you saying that WS-Routing should not be used for this
(i.e.,
> counts as 'twisted' ;)?

Not at all. Let's dissect the original scenario. In that scenario, the
desire was for the message exchange to look like this:

1) A sends a request message to B (ws1) looking for the average
temperature
2) B sends a message to C (ws2) containing the list of temperatures
3) C sends a response message to A containing the average.

This is totally kosher in SOAP, but you would do need to deviate from
the traditional HTTP request/response MEP. Here's a very direct way to
get there:

<!-- message 1 (A->B) -->
<soap:Envelope>
  <soap:Body>
    <xx:CalculateAverageTemperature>
      <respondTo>...address of A...</respondTo>
    </xx:CalculateAverageTemperature>
  </soap:Body>
</soap:Envelope>

<!-- message 2 (B->C) -->
<soap:Envelope>
  <soap:Body>
    <xx:CalculateAverageOfList>
      <respondTo>...address of A...</respondTo>
      <sample>67</sample>
      <sample>66</sample>
      <sample>82</sample>
    </xx:CalculateAverageOfList>
  </soap:Body>
</soap:Envelope>

<!-- message 3 (C->A) -->
<soap:Envelope>
  <soap:Body>
    <xx:Average>215</xx:Average>
  </soap:Body>
</soap:Envelope>

Something like WS-Routing can make this somewhat simpler by normalizing
the common properties of the message (e.g., to, respondTo, msgid, ...)
into a common SOAP header block. However, you don't need anything as
formal to get the job done. 

> If so, do you have something fundamental against the concept of
pipelining
> services? Or is it that you believe some additional protocol is needed
> (not
> counting authorization or mustUnderstand issues)?

I'm not against it at all. The interesting question (to me at least) is
whether or not B is an intermediary or an ultimate receiver. In my mind,
B is an ultimate receiver, however, strictly speaking, one could model
this such that B was an intermediary between A and C (albeit an "active"
intermediary). 

DB

> Thanks,
> Rand
> 
> -----Original Message-----
> From: Don Box [mailto:dbox@microsoft.com]
> Sent: Monday, February 10, 2003 9:51 AM
> To: Anne Thomas Manes; Rand Anderson; xml-dist-app@w3.org
> Subject: RE: concatenating web services
> 
> 
> > -----Original Message-----
> > From: Anne Thomas Manes [mailto:anne@manes.net]
> > Sent: Thursday, January 16, 2003 1:36 PM
> > To: Rand Anderson; xml-dist-app@w3.org
> >
> > I don't think that web service concatenation is an intended
> application
> > for
> > WS-Routing. WS-Routing defines a mechanism to route a message
through
> a
> > series of SOAP intermediaries on its way to the ultimate receiver.
The
> > original question involved concatenating two ultimate receivers.
> 
> Your analysis of WS-Routing is spot on. That stated, I've seen people
use
> WS-Routing (or home-grown variations) to do some pretty twisted
things.
> SOAP
> is pretty vague about what a SOAP intermediary can do to a message
before
> relaying it to the next SOAP node.
> 
> One feature of WS-Routing that would be useful in this scenario is the
> ability to do transport-independent async messaging. If one crafted
the
> message schemas correctly, getting the first service to send a message
to
> the second one wouldn't be terribly hard.
> 
> > The new W3C WS Choreography Working Group proposes to define a
> language
> > which would allow you to create a composite web service that would
> > coordinate this type of process. The announcement for the group only
> came
> > out yesterday, so they haven't delivered very much yet. You might
look
> at
> > WSCI (http://www.w3.org/TR/wsci/).
> 
> I think a simple XSLT (or equivalent) would solve this guy's problem.
> 
> > You also might look at Collaxa
> (http://www.collaxa.com/home.index.jsp). I
> > think they can do something like this. But you still have to create
a
> new
> > service that coordinates the concatenation.
> >
> > Anne
> >
> > > -----Original Message-----
> > > From: xml-dist-app-request@w3.org
> [mailto:xml-dist-app-request@w3.org]On
> > > Behalf Of Rand Anderson
> > > Sent: Thursday, January 16, 2003 2:38 PM
> > > To: xml-dist-app@w3.org
> > > Subject: RE: concatenating web services
> > >
> > >
> > >
> > > You may want to take a look at the WS-Routing protocol
> > > (http://www.google.com/search?sourceid=navclient&q=ws%2Drouting).
> > >
> > > HTH,
> > > Rand
> > >
> > > > -----Original Message-----
> > > > From: Vix [mailto:vixcc@yahoo.com]
> > > > Sent: Thursday, January 16, 2003 2:05 PM
> > > > To: Sudhir Agarwal; xml-dist-app@w3.org
> > > > Subject: Re: concatenating web services
> > > >
> > > >
> > > >
> > > > > i would like to know, whether it is possible to pipe the
> > > > output of one
> > > > > web services to the input of the other web service.
> > > > ...
> > > > > i want to avoid that the client c gets all the temperature
> > > > data from
> > > > > ws1 which it then sends to sw2 which calculates the average
> > > > and sends
> > > > > the answer to c. i would rather like to tell ws1 somehow
> > > > (how? that is
> > > > > actually my question) to send its output (list of
> > > > temperatures) to ws2
> > > > > and not to c. ws2 must be able interpret it as its input
> > > > and must know
> > > > > that it should send its output
> > > > > (average) to c and not to ws1.
> > > >
> > > >
> > > > I don't know of any existing possibility.
> > > > However, I would be really careful with this if it exists. This
is
> > > > simply because lots of security issues might be raised
> there.
> > > >
> > > > Please let me know if any such possibility exists.
> > > >
> > > > Best regards,
> > > >
> > > > Victor
> > > >
> > > >
> > > >
> > > > =====
> > > > _,.<~=`^`=~>.,_,.<~=`^`=~>.,_,.<~=`^`=~>.,
> > > > ------> tAke a bReak! gEt eNtertained! http://www.sallini.com/
> > > > ^`=~>.,_,.<~=`^`=~>.,_,.<~=`^
> > > > -> http://netdesignplus.net/
> > > > -> It works... It Pays...
> > > > _,.<~=`^`=~>.,_,.<~=
> > > >
> > > > __________________________________________________
> > > > Do you Yahoo!?
> > > > Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
> > > http://mailplus.yahoo.com
> > >
Received on Monday, 10 February 2003 12:11:21 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 7 December 2009 10:59:13 GMT