If the client can receive HTTP requests (for example, if it's an HTTP application itself making server-to-server calls), a solution I've often used is to give the client the option to specify a callback URL. This way, when the server completes the long-running operation, a request is sent to the callback URL with the relevant information (basically the same content of the status response). This addresses the issue of polling being potentially heavy on the server, but it requires the client to be more complex.