Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.22.77.149] |
|
Сообщ.
#1
,
|
|
|
Здраствуйте уважаемые форумчане.
У меня следующий вопрос: на странице должно выполнить долгое действие, например вызов какого либо сервиса есть два минуса 1. занятость потока, т.е. масштабируемость падает 2. Клиент долго ждёт пока к нему вернётся страница 1. Решаемо с помощью Async = "true" и вызовом AddOnPreRenderCompleteAsync. 2. Решение 1 не подходит так как фокус не возвращается потоку ASP, а соответственено юзер ждёт. Думаю можно сделать, что многопоточность, но боюсь вдруг хостер жто дело запретит, или можно сдлеать через Ajax, после закрвузки страницы отписать что типа выполняется, и через Ajax вызвать на сервера выполнение этой долгой операции, и потм просто спрашивать через интервал времени о выполненности. Подскажите какое из решений будет правильней не хотел бы изобретать велосипед быть может существуют более изящные и безопастные способы. Заранее благодарен за помощ!!! |
Сообщ.
#2
,
|
|
|
Цитата Stereon @ и через Ajax вызвать на сервера выполнение этой долгой операции, и потм просто спрашивать через интервал времени о выполненности. В этом случае все равно без потока не обойтись. Если делать через AJAX, то поток не нужен. Просто идет асинхронный запрос на сервер, и пока он выполняется, на сайте индикатор. Если хочешь прогресс - то это по-любому поток. |
Сообщ.
#3
,
|
|
|
А как насчёт разрешения запускат поток на хостере?
+ если запустить новый поток в PageLoad через Thread, то этот поток будет не из пула АСП, а если вызвать [AjaxMethod] по средствам аджакса потом после загрузки у клиента, этот запрос уже будет работать и создан будет из потока пула АСП. |
Сообщ.
#4
,
|
|
|
Я к сожалению, не в курсе что есть [AjaxMethod]. В ASP.NET AJAX, который я использую, AJAX-запросы обслуживаются в том же потоке, что и обычные.
|
Сообщ.
#5
,
|
|
|
Цитата Uncle_Bob @ Я к сожалению, не в курсе что есть [AjaxMethod]. В ASP.NET AJAX, который я использую, AJAX-запросы обслуживаются в том же потоке, что и обычные. В старом Аджаксе не в Атласе так обозначают методы в классе которые могут быть вызваны с клиента асинхронно. |
Сообщ.
#6
,
|
|
|
Есть еще BackgroundWorker, который по идее работает в том же пуле... Насчет new Thread не могу ничего сказать, не разбирался пока... Хотя использовал, работало и ладно
В новом аяксе ничего не надо такого указывать... |
Сообщ.
#7
,
|
|
|
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) Ajax.Utility.RegisterTypeForAjax(typeof(ajax), this.Page); Master.Page.ClientScript.RegisterClientScriptBlock(Master.Page.GetType(), "func", @"function CheckIndex() { document.getElementById('ctl00_ContentPlaceHolder1_Message_lb').value = '1'; var response = ajax.Payed(); var t = response.value; if ( t != null ) { document.getElementById('ctl00_ContentPlaceHolder1_Message_lb').innerHTML = t; } }", true); BackgroundWorker bw = new BackgroundWorker(); bw.DoWork+=new DoWorkEventHandler(DoWork); bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(RunWorkerCompleted); bw.RunWorkerAsync(); Master.Page.ClientScript.RegisterStartupScript(Master.Page.GetType(), "timer", "window.setInterval (CheckIndex, 3000);", true); } void DoWork(object sender, DoWorkEventArgs e) { System.Threading.Thread.Sleep(1000); } void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { HttpContext.Current.Session.Add("mykey", "Готово!!!"); } Страница не загружается пока не выполниться DoWork. гуру подскажите же что делать :-) |
Сообщ.
#8
,
|
|
|
А new Thread?
|
Сообщ.
#9
,
|
|
|
Stereon, на aspnetmania.com есть статья "Ожидание выполнения длительного процесса в ASP.NET"
|
Сообщ.
#10
,
|
|
|
Цитата Uncle_Bob @ А new Thread? тоже самое Grienders - сянкс, ща гляну |