Обновление изображения на странице ASP.NET из памяти без обновления страницы - PullRequest
1 голос
/ 03 апреля 2010

У меня есть сервер командной строки C # и клиент ASP.NET, они оба общаются через .NET Remoting. Сервер отправляет клиенту неподвижные изображения, полученные с веб-камеры со скоростью, скажем, 2 кадра в секунду. Я могу передать изображения клиенту через удаленный вызов метода, и изображение заканчивается в этом клиентском методе:

    public void Update(System.Drawing.Image currentFrame)
    {
        // I need to display the currentFrame on my page.
    }
  1. Как отобразить изображение на странице без сохранения изображения на жесткий диск? Если бы это было приложение WinForms, я мог бы передать currentFrame к картинке, т.е. picturebox.Image = currentFrame.

  2. Вышеуказанный метод Update запускается как минимум 2 раза в секунду. Если бы клиент был приложением winForms, я мог бы просто поставить picturebox.Image = currentFrame, и текущий кадр на экране автоматически обновился бы. Как добиться того же эффекта с ASP.NET? Нужно ли перезагружать всю страницу и т. Д.? Я хочу сделать так, чтобы это выглядело как прямая трансляция видео!

Ответы [ 2 ]

1 голос
/ 03 апреля 2010

Для отображения изображения вам понадобится страница или обработчик на сервере.Это его работа.Затем вы можете разместить на странице javascript, который отображает изображение, которое действует по таймеру (window.setTimeout) и постоянно опрашивает сервер на предмет обновленного изображения.Вы, вероятно, захотите сделать запрос несколько динамическим в строке запроса, чтобы не зацикливаться на повторном отображении кэшированного изображения вместо нового изображения, доставленного сервером.Что-то вроде

<script type="text/javascript" language="javascript">
    i = 0;
    window.setTimeout(updateImage, 500);
    var img = document.getElementById('img_to_update');

    function updateImage() {
        img.src = 'imageRenderer.aspx?req=' + i;
        i += 1;
        window.setTimeout(updateImage, 500);
    }
</script>

Где i служит только для сохранения уникальности запроса для предотвращения проблем с кэшированием.

В любом случае, это точный сценарий?Возможно, нет, я записал это на макушке, и уже давно я ничего подобного не делал.Но это должно дать вам представление о том, как вы можете достичь части этой клиентской независимости от серверной технологии.(Этот сценарий может быть на любой странице, статическим или динамически отображаемым.)

1 голос
/ 03 апреля 2010

Вы оставили из игры одного игрока: браузер.Ваш вопрос на самом деле таков: как мне заставить браузер на каком-то случайном компьютере в Интернете обновить отображаемое изображение на основе того, что происходит на сервере.

Ответ, конечно же, таков:'t.

Вы можете поместить изображение внутри UpdatePanel и обновить панель на основе таймера.URL-адрес для свойства src изображения может привести к вашему собственному HttpHandler (.ashx файлу), который будет вызывать сервер для получения последнего изображения.

Всегда помните, какВеб работает: браузер контролирует, а не сервер.

PS .NET Remoting устарела в пользу WCF.

...