powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Парциальная отправка данных клиенту
8 сообщений из 8, страница 1 из 1
Парциальная отправка данных клиенту
    #37666871
Zhirinovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На веб-форме - текстбокс и кнопка. Юзер вводит в текстбокс команду и сабмитит по нажатию кнопки.

Эта команда является аргументом некоего консольного приложения на стороне сервера (приложение запускается через System.Diagnostics.Process.Start() от имени определенного юзера).
Приложение в течении некоего времени после запуска (20-30 секунд) может отдавать данные клиенту. Собственно если реализовывать это всё синхронно проблем никаких. Захотелось для красоты сделать асинхронно через аякс (чтобы не ждать эти 20-30 секунд отправки страницы).

Слив данных с приложения происходит через ивенты:
Код: c#
1.
2.
consoleApp.OutputDataReceived += outputDataReceived;
consoleApp.Exited += consoleAppExited;



Как лучше организовать всё это дело, чтобы по генерации ивента на стороне сервера данные сливались клиенту? Использовать отдельный поток на стороне сервера? Про базовую работу с <asp: UpdatePanel> и <asp:ScriptManager> в курсе. Ткните носом, что почитать конкретно по этому вопросу.
...
Рейтинг: 0 / 0
Парциальная отправка данных клиенту
    #37667013
Artem k.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гуглите Ajax long-polling. В кратце: в HTTP сервер может отдавать данные клиенту только в ответ на запрос, всвязи с этим ограничением сначала придумали Comet (long-polling), потом WebSockets. Последний не работает в IE8- и сквозь корпоративные прокси.

Есть пара проектов, которые могут быть вам интересны:
http://pokein.codeplex.com/
https://github.com/SignalR/SignalR
...
Рейтинг: 0 / 0
Парциальная отправка данных клиенту
    #37667061
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно пойти еще дальше и погуглить на тему push сообщений. Вот пример: ASP.NET Push notifications с помощью SignalR
Самое простое: по таймеру с клиента периодически опрашивать сервер.
...
Рейтинг: 0 / 0
Парциальная отправка данных клиенту
    #37667111
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ за "по таймеру с клиента периодически опрашивать сервер"
...
Рейтинг: 0 / 0
Парциальная отправка данных клиенту
    #37667398
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_st+ за "по таймеру с клиента периодически опрашивать сервер"
Предполагю следующий вопрос ТС'а: "Как?" :)

...
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
<script type="text/javascript">
    var count;

    function GetResult() {
        if (count <= <%= Total %>) {
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "Default.aspx/GetResult",
                data: "{'value': '" + count + "'}",
                dataType: "json",
                async: false,
                success: function (result) {
                    var txt = $("#txt");
                    txt.html(txt.html() + "</br>" + result.d);
                    count++;
                }
            });
        }
        return false;
    }

    $(document).ready(function () {
        count = 1;
        for (var i = 0; i < <%= Total %>; i++) {
            setTimeout(function(){ GetResult(); }, i * 500); 
        }
    });
</script>



...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public partial class Default : System.Web.UI.Page
{
    public int Total { get { return 10; } }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Enumerable.Range(1, Total).ToList().ForEach((d) => Session["ID_" + d] = d * 100);
        }
    }

    [WebMethod]
    public static int GetResult(int value)
    {
        var obj = HttpContext.Current.Session["ID_" + value.ToString()];
        return Convert.ToInt32(obj);
    }
}

...
Рейтинг: 0 / 0
Парциальная отправка данных клиенту
    #37667630
Zhirinovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

авторПредполагю следующий вопрос ТС'а: "Как?" :)

Вы не угадали :), реализовал уже через таймер, пусть временно так поработает.
В дальнейшем переведу на что-то другое, пока приглянулось Server Sent Events, разбираюсь в принципе работы :)
...
Рейтинг: 0 / 0
Парциальная отправка данных клиенту
    #37667811
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> В дальнейшем переведу на что-то другое, пока приглянулось Server Sent Events, разбираюсь в принципе работы :)

"по таймеру с клиента периодически опрашивать сервер" - самое оно. Всё остальное - жалкие потуги. Пока редистейт третий не заработает или сокеты, об этом можно забыть.
...
Рейтинг: 0 / 0
Парциальная отправка данных клиенту
    #37668578
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гуглите chunked http
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Парциальная отправка данных клиенту
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]