Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Разработка под ASP.NET > Асинхронная обработка данных |
Автор: Drago 24.7.2007, 15:49 |
Всем привет! Ребят, меня интересует такой ламерский вопрос. Клиент вводит данные, отправляет их на сервер, после чего на сервере идет их долгая обработка. На каждом этапе обработки создается событие о его завершении. При наступлении данного события хотелось бы выводить клиенту данные и продолжать обработку. Помогите плиз, желательно с разъяснениями... З.Ы. Надеюсь без аякса это можно сделать? Слышал о IHttpAsyncHander, но как его использовать не знаю совершенно. Заранее спасибо ![]() |
Автор: Idsa 25.7.2007, 00:21 |
Как-то натолкнулся я на очень хороший http://forum.ixbt.com/topic.cgi?id=26:36828 на ixbt как раз по этой теме. В топике перечислены все способы организации асинхронных вызовов. Для 4-го пункта там нет ссылки. Пример реализации данного подхода можно найти в http://forum.ixbt.com/topic.cgi?id=26:36842 топике того же форума. |
Автор: Mymik 25.7.2007, 08:27 |
Idsa, по сути это все сторона одной монеты :о(. Drago, сервер не может выдать кусок данных пользователю, потом сказать типа, "все", а потом ой, ты знаешь, я еще хотел тебе что-то сказать. Это так как я понимаю общение межде сервером и клиентом. Просто секьюрити не позволяет этого делать, и получается что сделать коннект можно только по запросу пользователя. Если не использовать AJAX, то мне очень даже понравилась реализация с подгрузкой данных как в виде js файла. Т.е. тебе надо будет в этом JS файле генерировать скрипт с данными что ты хочешь отобразить. И все это повесить на setInterval (JS функция) и радоваться жизни... |
Автор: Idsa 25.7.2007, 19:38 |
Я бы так не сказал. По крайней мере там можно выделить 2 метода: 1. с использованием фреймворка AJAX 2. использование стандартных средств JS. P. S. Метод с подгрузкой JS мне тоже очень понравился. |
Автор: Drago 25.7.2007, 20:32 |
Забил я на вывод промежуточных результатов пользователю. Сделал асинхронную страницу, которая считает в фоне, а результат выводит в конце обработки. На ИИС все работало отлично, как только залил на сервер, сразу получил ошибку (там юникс стоит). Дело в том что моно не знает директиву Async, поэтому пришлось все переделывать. Сейчас у меня появилась идея выделить метод, который обрабатывает данные, в отдельный поток. По завершении обработки так же выкидывается событие, которое перехватывается другим методом, меняющим глобальную переменную CompleteTask на true. На форму добавил кнопку, по клику на которой вызывается метод выводящий результат обработки, если CompleteTask = true. А на клиенте есть яваскрипт, который эту самую кнопочку и кликает каждые 10 секунд. Тока вот не работает нифига ))) Но это я еще завтра посмотрю, может событие не перехватывается. Во настрочил ![]() Народ как думаете работать то будет? Может как то проще можно извернутся... |
Автор: Idsa 25.7.2007, 21:59 |
Насколько я понял, ты, до рендеринга ждешь реакции клика с клиента? Если так, то зря. Пока твой код полностью не будет выполнен, клиент его не получит, а значит ни о каких кликах не может быть и речи. P. S. Может, все-таки внимательно ознакомишься с предложенным материалом?! В том топике указаны все возможные способы организации асинхронных вызовов. Вряд у тебя получится придумать новый. |
Автор: Drago 26.7.2007, 11:07 | ||
Idsa ты меня немного не так понял ![]()
Т.е. на странице у пользователя лежат 2 кнопки. Одна из них вызывает Go_Click(), после чего начинается обработка данных в отдельном потоке, у пользователя выводится "Идет обработка". Вторая же кнопка вызывает ShowResult(). Я хочу ее сделать скрытой и с помощью JavaScript имитировать клик каждые 10 секунд. Я наверное извращенец, но пока еще не знаю как вызывать метод ShowResult() из JavaScript так же каждые 10 секунд... Понимая, что использование скрытых кнопок не хорошо ![]() ![]() З.Ы. Все необходимые переменные запихнул в сессию ![]() |
Автор: Drago 26.7.2007, 17:37 |
Сделал я то, что задумал, только вот теперь надо как нибудь избавиться от кнопки размерами 0 на 0 )) И как то извернуться вызвав метод ShowResult() с клиента... Ни у кого нет идей? |
Автор: Drago 27.7.2007, 13:22 |
Сделал на клиенте скрипт вызывающий form.submit() и вызываю его каждые 10 секунд. А на пэйдж лоад поставил вывод данных, если обработка закончена. Чем плох такой подход и есть ли альтернатива? З.Ы. Знаю что как то можно использовать XMLHttpRequest, реализующий идею Аякс... Если кто нибудь подскажет как, буду очень благодарен ![]() |
Автор: VirusUZ 1.2.2011, 07:28 |
![]() |