Hi Ali, see my comments in-line :-)

Ali Sadik Kumlali wrote:
Hi Rodrigo,

Thank you very much for taking your time and sharing your thoughts with
me.

I forgot to mention that I already used WS-Addressing. Sorry for that.
Actually, after Anne's reply, I looked at the spec and noticed that I
needed to spend more time on WS-Addressing :-)

If you don't mind I need to ask some questions regarding your reply.

2) The solution you are considering is basically correct, but putting and EndPointReference to the service will be better than a simple service name. Shortly, it will safe you some programming at the client side if you get a ready-to-use EPR ;-)

Do you mean that I should use something like this:

<wsa:EndpointReference>
    <wsa:Address>xs:anyURI</wsa:Address>
    <wsa:ReferenceProperties>... </wsa:ReferenceProperties>
    <wsa:ReferenceParameters>... </wsa:ReferenceParameters>
    <wsa:PortType>xs:QName</wsa:PortType>
    <wsa:ServiceName PortName="xs:NCName">xs:QName</wsa:ServiceName>
    <wsp:Policy> ... </wsp:Policy>
</wsa:EndpointReference>

If yes, where should I put this in WSDL? And how do I add it to my
ResultIsReadyMsg?

Yes, that is the type I was referring to :-)

The type definition is included in the WS-Addressing XSD schema. You just have to import it into your WSDL descriptors and use it as any other type. For example:

<xsd:complexType name="ResultIsReadyRequestType">
  <xsd:sequence>
    <!-- Your fields here -->

    <xsd:element name="GetResultsService"
                 type="wsa:EndpointReferenceType"/>
  </xsd:sequence>
</xsd:complexType>


In your server, you can use some kind of session id (perhaps the original message identifier, perhaps any other generated value) to identify the operation, and include this id as a ReferenceProperty of the returned EPR. This way, the EPR will have all the necessary data to identify the operation results to return.


Some thoughts about your description:

- You should include an EPR in OpenAccountMsg, pointing to the
service

Do you mean the client need to add <wsa:ReplyTo> in OpenAccountMsg? If
yes, how can I enforce it in WSDL?


You can put the EPR within the headers or within the body.

If you put it in the header, you may use ReplyTo and FaultTo to specify the addresses of the services to be notified on success and error, or ReferenceParameters if you feel the previous ones do not fit your semantics, but AFAIK you will have no way to enforce this in your WSDL. If I am right, these fields(ReplyTo and FaultTo) were intended to be used for redirecting the response of synchronous services.

The other option is to put it within the request body, as an element of the request message (see my previous comment). This option does allows you to enforce the syntax, as you make it explicit.

- Why do not you include the results in the event notification
itself?

I want the client.wsdl to be as simple as possible. Since I provide
Get<X>Result services for all the asynchronous services (<X>), clients
already know how to handle the responses. I thought that it would be
extra work for them implementing Accept<X>Result services, too. You
might say me to only use Accept<X>Result in client.wsdl and remove
Get<X>Result from the server.wsdl. But, I have to provide Get<X>Result
services to handle  notification error situations. Thus, the clients
will be able to query if they somehow haven't got the notification
message yet.


I see your point :-)

Anyway, I would not reject this option too fast. My personal opinion has always been that there is no one-and-only correct way of doing things. Just scan what I write, and then do whatever you want to ;-)


- You could put all your result types in a single XSD schema, and import it in both WSDLs. From the point of view of maintainability, your client wsdd will be almost as simple as before. You just have to add a single extra element to the notification messages.

- Your client already has the logic for processing the results. When receiving the notification, you could call the same method/function in your client.

- Reducing the number of messages, you also reduce:
   - the possibilities of a remote exception :-)
   - the latency for obtaining the results.
   - the workload in the server

Cheers,
Rodrigo Ruiz

Again, thank you very much for your valuable comments.

Best regards,

Ali Sadik Kumlali

--- Rodrigo Ruiz <[EMAIL PROTECTED]> wrote:

Ali,

1) The scenario you describe seems correct to me. Event Notification
is a rather common pattern, and some specifications that can be of help are WS-Eventing and WS-BaseNotification. Anyway, your scenario is simple enough for, as Anne stated, WS-Addressing being enough to implement
it.

2) The solution you are considering is basically correct, but putting

and EndPointReference to the service will be better than a simple service name. Shortly, it will safe you some programming at the client side if you get a ready-to-use EPR ;-)

Some thoughts about your description:

- You should include an EPR in OpenAccountMsg, pointing to the
service that will receive the notification in the client side.
- Why do not you include the results in the event notification
itself?

Regards,
Rodrigo Ruiz

Anne Thomas Manes wrote:
WS-Addressing.

On 4/27/06, *Ali Sadik Kumlali* <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    Hi all,

    I want to send a notification message to my clients when their
requests
    are processed and the results are ready. Then I expect them to
call a
    service to acquire the results. Here is the sample scenario:

    server.wsdl
    ------------
    - OpenAccount
        - input: OpenAccountMsg

    - GetOpenAccountResult
        - input: GetOpenAccountResultMsg
        - output: GetOpenAccountResultResponseMsg

    client.wsdl
    ------------
    - ResultIsReady (input only)
        - input: ResultIsReadyMsg


                          OpenAccountMsg (MessageId: A)
    Client ----------------------------------------------------->
Server

                 ResultIsReadyMsg (MessageId: B, RelatesTo: A)
    Client <-----------------------------------------------------
Server

            GetOpenAccountResultMsg (MessageId: C, RelatesTo: A)
    Client ----------------------------------------------------->
Server
           <-----------------------------------------------------
            GetOpenAccountResultResponseMsg (MessageId: D,
RelatesTo: A)

    Here are the questions:
    1) Do you see any flaw in this scenario? Or is there a common
and
    standards based way to accomplish this kind of asynchronous
    communication?

    2) I haven't found a good way to say my clients which service
do they
    need to call for getting the results. I'm planning to put the
name of
    result service name (GetOpenAccountResultMsg) in notification
message
    (ResultIsReadyMsg).

    Could you please enlighten me? Any help would be great!

    Ali Sadik Kumlali


    __________________________________________________
    Do You Yahoo!?
    Tired of spam?  Yahoo! Mail has the best spam protection around
    http://mail.yahoo.com




------------------------------------------------------------------------
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.1.385 / Virus Database: 268.5.0/325 - Release Date:
26/04/2006

--
-------------------------------------------------------------------
GRIDSYSTEMS                    Rodrigo Ruiz Aguayo
Parc Bit - Son Espanyol
07120 Palma de Mallorca        mailto:[EMAIL PROTECTED]
Baleares - Espa�a              Tel:+34-971435085 Fax:+34-971435082
http://www.gridsystems.com
-------------------------------------------------------------------


--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.385 / Virus Database: 268.5.0/325 - Release Date:
26/04/2006




__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com


--
-------------------------------------------------------------------
GRIDSYSTEMS                    Rodrigo Ruiz Aguayo
Parc Bit - Son Espanyol
07120 Palma de Mallorca        mailto:[EMAIL PROTECTED]
Baleares - España              Tel:+34-971435085 Fax:+34-971435082
http://www.gridsystems.com
-------------------------------------------------------------------


--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.385 / Virus Database: 268.5.1/326 - Release Date: 27/04/2006

Reply via email to