2010-05-13 6 views
4

У меня есть простая веб-страница в ASP.NET/C#. В настоящее время для полного представления данных мне требуется вызывать блок кода, который выполняется по фоновым потокам и может занять несколько минут. Я получил это до такой степени (используя атрибут async в объявлении страницы), чтобы выполнить и вернуть штраф с помощью html, как только это будет сделано. То, что я хотел бы сделать, это позволить мне немедленно вернуться с «загрузочной страницей», а затем обновить эту страницу, когда фоновая работа будет завершена. Сейчас я ничего не получаю на странице во время обработки фоновой работы. Любые идеи о лучшем способе или умном способе сделать это будут очень оценены!'Загрузка' веб-страницы для асинхронного вызова

Спасибо,

Sieg

ответ

0

Есть много способов реализации того, что вы описали с помощью Ajax, но если вы хотите сохранить его очень просто, вы можете просто Flush() свой ответ с некоторой загрузкой экрана перед запуском длинные выполняющиеся задачи:

<div> 
    Loading.. 
    <% Response.Flush(); %> 
    <% System.Threading.Thread.Sleep(5000); %> 
    Done! 
</div> 
+0

Пробовал, что одна и идея понравился, потому что это казалось просто и красиво. Однако, несмотря на то, что он, казалось, работал изначально, он потерпел неудачу в конце, потому что он не смог сохранить сеанс. – Sieg

0

то, что вы хотите, называется HTTP Server Push или HTTP Потоковое вещание или Длинный опрос. В зависимости от того, как это делается.

В Интернете есть множество примеров, а также статьи, в которых подробно рассматриваются проблемы. Я бы начал изучать их.

Вы также можете проверить это так вопрос по HTTP Streaming ...

Cross-browser implementation of "HTTP Streaming" (push) AJAX pattern

Там ссылка на большой интро статье там.

Или это один с примером Long Polling

How do I implement basic "Long Polling"?

или

https://stackoverflow.com/questions/tagged/long-polling

Надежда это помогает.

1

Я согласен с комментариями, опубликованными выше.

Я бы использовал и «процессор» как отдельную страницу, используя ashx (handler), поскольку они действительно просты для вызова и опроса из javascript, и вы просто кодируете поток событий запроса процесса в поток ответов ,

Я хотел бы показать вам пример на моем сайте, но мой хост решил провести неделю с моего сайта, пока они обновляют .net на своих серверах (вы можете себе представить, что им это не особенно понравилось).

По существу, хотя в моем случае у меня есть страница, которая опирается на данных: БиБиСи Google амазонка YouTube некоторых других случайных сайтов.

Страница возвращается пользователю и отдельным элементам управления на странице, а затем делает ajax-запросы на сервер для своих частей.

Содержимое по умолчанию для тегов, в которые будут загружены данные обратной связи, представляет собой простое анимированное изображение gif, которое выглядит так же, как кружок загрузки flash или silverlight.

Как только данные возвращаются, gif заменяется содержимым, переданным сервером.

Это означает, что клиент видит «загрузку», и сервер занят обработкой всего (казалось бы, синхронно с его точки зрения), который нужен клиенту.

Это чистый пользовательский интерфейс, и код действительно прост.

Я споткнулся над идеей, когда смотрю, как делать загрузку файлов с помощью silverlight.

Основная концепция:

  1. Ajax вызов "ASHx". (возможно, 10 строк javascript)
  2. запрос процессов сервера. (зависит от сложности запроса, переменные, переданные с помощью querystring)
  3. ответ заполняет 1 элемент на другой странице. (Аякс cllback это делает)

Надеется, что это помогает :)