You should be able to set a timeout in the web service object - the details will depend on which class it uses, but see WebClientProtocol.Timeout for an example.
Now you can either call it synchronously from a dedicated thread, or start an asynchronous call to the web service by specifying the callback that should be executed (possibly in the thread pool thread) when the service is responding. In this case, you may find that you can specify a timeout for an asynchronous call - again, this will depend on what proxy class you have for the web service.
This way, you don’t need to "waste" the thread just waiting for an answer - but you may find that an asynchronous programming model is harder to understand than a synchronous one. If you have only one or two of these requests at any given time, an extra pair of threads is unlikely to be a problem. If you expect responses from 500 different services, then, of course, there will be a different topic and an asynchronous model.
source share