Благодаря тому, как Интернет работает, вам нужно будет иметь клиентский сценарий опрашивать сервер. Сервер всегда слушает запрос от клиента, но клиенты не всегда слушают ответ с сервера, поэтому, если клиент не инициировал запрос, он не будет ждать ответа.
Что касается этого, я использовал JQuery для использования веб-службы ASP.Net в прошлом и был очень доволен. Если вы пройдете этот маршрут, ASP.net автоматически преобразует между объектами JSON в .Net и обратно, что очень удобно.
Here is a post, показывающий вам, как использовать JQuery для доступа к веб-службе, и another one о том, как настроить веб-службу на сервере.
Кроме того, вы, как правило, не хотите, чтобы веб-служба занимала несколько минут, так как это может привести к тому, что на сервере не будет проблем с потоком. Возможно, вам захочется узнать о настройке запланированной задачи, чтобы предварительно вычислить эти данные или добавить индексы в источник данных, чтобы вы могли быстрее просмотреть их. В любом случае, пока вы используете AJAX, веб-взаимодействие вашего пользователя не будет заблокировано (т. Е. Они все равно смогут нажимать ссылки и взаимодействовать с вашим сайтом. Если они перемещаются в сторону от страницы, хотя при загрузке браузер закроет соединение, и пользователь запустит новый запрос и все время будет ждать все, чтобы получить ответ.)
К сожалению, я ничего не знаю о новой библиотеке параллельных задач .NET, но, возможно, который вы могли бы преследовать, в зависимости от того, что вы запрашиваете, было бы сделать несколько запросов AJAX для разных фрагментов данных. Это автоматически сделает вещи параллельными на стороне сервера, давая вам дополнительное преимущество, показывающее прогресс на стороне клиента, поскольку каждый из этих запросов возвращается независимо. Если это не работает, другой популярный шаблон, чтобы уведомить пользователя о прогрессе при длительных запросах, - это передавать данные так часто вместе с «токеном продолжения». Пока клиентский код получает токен продолжения, он знает, что есть больше данных, и он передает этот токен обратно серверу со следующим запросом. Затем сервер использует этот токен, чтобы забрать его в последний раз. Таким образом, это может быть что-то такое же простое, как RowID, который он остановил в прошлый раз.
Или скрипт на стороне клиента должен опросить страницу или службу WCF или что-то получить обновления? – JeremyBeadle