Отправка сообщения о ходе выполнения с сервера на клиент с использованием Ajax
Я использую UpdatePanel, чтобы вызвать событие нажатия кнопки, которое сохраняет более 100 файлов в указанной папке. Я хочу, чтобы сервер обновил клиент о статусе и количестве сохраняемых файлов.
protected void btnSave_Click(...){
var filesToSave = GetFilesToSave();
foreach(var fileToSave in filesToSave){
SaveProcessedFile(fileToSave);//It takes almost 30seconds to save a file
UpdateStatusOnClient(fileToSave); //Don;t know what should be done here???????????
}
}
Я ищу некоторую реализацию "UpdateStatusOnClient", откуда я могу отправить желаемое сообщение клиенту или асинхронно обновить сообщение метки, чтобы клиент знал ход и состояние сохраняемых файлов.
Благодарю.
1 ответ
Это не так просто... Вы не можете активно отправлять что-то с сервера клиенту. Только клиент может сделать запрос для запроса статуса.
Теперь у вас уже запущен запрос (нажмите на кнопку). Но это закончится только после сохранения 100 файлов. Теоретически, вы можете отправить небольшой кусочек данных, записав ответ, а затем сбросив его, чтобы убедиться, что данные передаются. Я никогда не пробовал этого, и я не знаю ни одного Ajax-клиента, который мог бы справиться с таким ответом.
Я хотел бы сделать следующее: сохранить текущее состояние в объекте сеанса ASP.NET, а затем сделать еще один Ajax-запрос по таймеру для запроса состояния каждые X секунд. Имейте в виду, что запрос на кнопку все еще выполняется, пока вы делаете это (это может вызвать проблемы). Вы можете вместо этого инициировать асинхронное действие.