It would be wiser to implement the call in two parts.
- Invoke the method to start the process, returning a token to track the status
- Periodically (every 5 mins?) poll another method submitting the token and returning a status
This is far superior to leaving a connection open and waiting.
Another possibility is to use something like SignalR to do the polling for you. When the server completes, you would expect to receive the result almost immediately.