If you implement callback contracts, you remove the need for the client to execute multi-threaded code. This may not be a significant advantage when working with .Net clients (since VS will automatically generate asynch proxy code for you), although it may be useful when working with clients of other platforms / languages.
Which one is cleaner? Well, it depends on whether you are a client or server developer. If, as I suspect in your case, both of you, and you can simply use .Net for the client and server, then I will probably be tempted to avoid callbacks. If you meant that the service calls where it takes 45 seconds, then I would say that you need to translate the contracts, this is really subjective, but if I had to stick my neck out, I would say that if the answers take more than 5 seconds, then it's time to move on to callbacks.
source share