2012-01-09 4 views
4

У меня есть страница asp.net, которая должна будет выполнить некоторую асинхронную работу, например, посещать URL-адреса и загружать контент, который может занять несколько минут. За это время по мере завершения каждой задачи необходимо обновить что-то на странице, чтобы указать прогресс и т. Д. Какой предпочтительный подход для этого? вызывая некоторый javascript на стороне клиента и передавая ему данные?ASP.NET Server асинхронные обновления страниц

Я пытаюсь использовать материал параллельной библиотеки .NET Task для асинхронных действий.

Спасибо за ваше время

+0

Или скрипт на стороне клиента должен опросить страницу или службу WCF или что-то получить обновления? – JeremyBeadle

ответ

4

Благодаря тому, как Интернет работает, вам нужно будет иметь клиентский сценарий опрашивать сервер. Сервер всегда слушает запрос от клиента, но клиенты не всегда слушают ответ с сервера, поэтому, если клиент не инициировал запрос, он не будет ждать ответа.

Что касается этого, я использовал JQuery для использования веб-службы ASP.Net в прошлом и был очень доволен. Если вы пройдете этот маршрут, ASP.net автоматически преобразует между объектами JSON в .Net и обратно, что очень удобно.

Here is a post, показывающий вам, как использовать JQuery для доступа к веб-службе, и another one о том, как настроить веб-службу на сервере.

Кроме того, вы, как правило, не хотите, чтобы веб-служба занимала несколько минут, так как это может привести к тому, что на сервере не будет проблем с потоком. Возможно, вам захочется узнать о настройке запланированной задачи, чтобы предварительно вычислить эти данные или добавить индексы в источник данных, чтобы вы могли быстрее просмотреть их. В любом случае, пока вы используете AJAX, веб-взаимодействие вашего пользователя не будет заблокировано (т. Е. Они все равно смогут нажимать ссылки и взаимодействовать с вашим сайтом. Если они перемещаются в сторону от страницы, хотя при загрузке браузер закроет соединение, и пользователь запустит новый запрос и все время будет ждать все, чтобы получить ответ.)

К сожалению, я ничего не знаю о новой библиотеке параллельных задач .NET, но, возможно, который вы могли бы преследовать, в зависимости от того, что вы запрашиваете, было бы сделать несколько запросов AJAX для разных фрагментов данных. Это автоматически сделает вещи параллельными на стороне сервера, давая вам дополнительное преимущество, показывающее прогресс на стороне клиента, поскольку каждый из этих запросов возвращается независимо. Если это не работает, другой популярный шаблон, чтобы уведомить пользователя о прогрессе при длительных запросах, - это передавать данные так часто вместе с «токеном продолжения». Пока клиентский код получает токен продолжения, он знает, что есть больше данных, и он передает этот токен обратно серверу со следующим запросом. Затем сервер использует этот токен, чтобы забрать его в последний раз. Таким образом, это может быть что-то такое же простое, как RowID, который он остановил в прошлый раз.

3

Возможно, вы захотите проверить библиотеку SignalR, которая позволяет осуществлять связь/события в реальном времени с сервером через HTTP, посредством длительного опроса или даже веб-сокетов для более новых браузеров.