2010-04-03 122 views
1

我有一个命令行C#服务器和一个ASP.NET客户端,它们都通过.NET Remoting进行通信。服务器正在向客户端发送从网络摄像头抓取的静止图像,例如每秒2帧。我可以通过远程方法调用传递图像到客户端,并在该客户端方法图像结束:从内存中更新ASP.NET页面中的图像而不刷新页面

public void Update(System.Drawing.Image currentFrame) 
    { 
     // I need to display the currentFrame on my page. 
    } 
  1. 如何显示在页面上的图像,无需将影像保存到硬盘?如果它是一个winForms应用程序,我可以将currentFrame传递给picturebox即。 picturebox.Image = currentFrame

  2. 以上Update方法每秒至少被激发2次。如果客户端是winForms应用程序,我可以简单地把picturebox.Image = currentFrame和屏幕上的当前帧会自动更新。我如何实现与ASP.NET相同的效果?整个页面是否需要重新加载等?我想基本上让它看起来像一个实时视频源!

回答

1

您已将一名玩家退出游戏:浏览器。你的问题真的是:我如何让浏览器在Internet上的一些随机计算机上,根据服务器中发生的情况更新它显示的图像。

答案当然是:你不知道。

您可以将图像放置在UpdatePanel中,并根据计时器更新面板。图像的src属性的URL将不得不导致您自己的HttpHandler.ashx文件),这会调用服务器以获取最新的图像。

永远记住Web的工作原理:浏览器处于控制状态,而不是服务器端。

P.S. .NET Remoting已被弃用,以支持WCF。

1

您需要在服务器上有一个页面或处理程序来呈现图像。这是它的工作。然后,您可以在显示作用于计时器的图像的页面上显示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只会保持独特的,以防止缓存问题的请求。

无论如何,这是确切的脚本?也许不是,我把它写成了我的头顶,而且自从我做了类似的事情之后已经有一段时间了。但是它应该让你了解如何实现服务器端技术的客户端独立功能的一部分。 (该脚本可以在任何页面上,静态或动态呈现。)