In this chapter, you have seen three ways to send and process messages to improve the response time of a service and exploit multiple threads. You should use OneWay messaging for long-running operations that do not return any data. For operations that do pass information back to the client application, you can generate a client proxy using the svcutil utility with the /async option and invoke these operations asynchronously from the client. A service can also choose to implement a long-running operation asynchronously, independent from the way in which the client application actually invokes the operation, by setting the AsyncPattern property of the operation contract to True, and then implementing the IAsyncResult design pattern. If client applications and services execute at different times, you can use message queuing and the MSMQ transport.