Getting results from asynchronous invocations
In many cases, the "fire-and-forget" nature of asynchronous communication may be applied only to prevent client blocking, not because there is no desire to find out the result of the service call. The options for retrieving service results depend heavily on the types of service clients and expected availability of both ends of the service transactions.
Ideally, you'd want your service client to be able to make outbound calls and also host inbound ones. This sort of solution where both the client and service can send messages to each other independently is called a duplex service. In this fashion, our client could makes an asynchronous call, and the service could delivers an out-of-band response event that the client would handle, accordingly. However, this approach is neither interoperable nor accommodating to clients and services that are online at different times.
A service designer who is most interested in supporting the widest range of consumers...