обновить браузер через asp.net из фоновых процессов - PullRequest
0 голосов
/ 04 мая 2011

У меня есть метод веб-сервиса, который берет Id, а затем запускает библиотеку классов для обработки некоторой информации о данном Id.

Процессор использует материал Trace.Write (), чтобы сообщить о прогрессе.Это хорошо работает в консольном приложении, но я хочу иметь возможность отправлять ту же информацию пользователю через Интернет.

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

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

Это служба ASP.NET, файл Ashx.

Каков наилучший способ добиться этого?

Заранее спасибо

вот мой код, чтобы начать процесс:

function ProcessEmail(emailId) {
        var popupcontent = $("#EmailPopUp");
        $.ajax({
            type: "POST",
            async: false,
            url: "/MailboxPro/Methods/Emails.ashx?action=TestProgress",
            data: { EmailId: emailId },
            success: function (result) {
                alert("result");
            }
        });
    }

Ответы [ 2 ]

0 голосов
/ 29 мая 2011

Проблема была вызвана тем, что слушатель все еще был «подключен» к выходу.

Вызов Listeners.Remove(myListener) в конце процесса означал, что он будет работать каждый последующий раз.

0 голосов
/ 04 мая 2011

Ну, одним из способов может быть подключение вывода трассировки к ответу с помощью TraceListener .Уже существует реализация, которая записывает вывод трассировки в ответ - посмотрите WebPageTraceListener .В случае, если форматирование вывода этим слушателем не по вашему вкусу, вы всегда можете написать свой собственный слушатель трассировки.Здесь важно отключить буферизацию вывода ответа (используя свойство BufferOutput ), чтобы ваши обновления немедленно отправлялись клиенту.Вы также должны поддерживать ваш запрос в актуальном состоянии - то есть ProcessRequest не должен заканчиваться до завершения вашего процесса.Вы должны поиграть с настройкой тайм-аута запроса в конфигурации ASP.NET в зависимости от того, сколько времени занимает ваш процесс.

В качестве альтернативы, вы можете сразу же вернуть свой ashx, а затем делать периодические запросы ajax для получения обновлений процесса.Опять же, вам нужно захватить вывод трассировки и сохранить его в каком-то хранилище (например, в памяти или файле) и вернуть его, когда поступит запрос ajax для обновления процесса.

...