2009-06-24 201 views
1

我正在尝试创建一个网页,它将允许用户从使用ASP.NET连接到服务器的摄像头捕获图像。相机是奥林巴斯,服务器端代码可以访问相机sdk中的所有同步通话。
当我试图捕获图像时出现问题。
它在SDK中的工作方式是先告诉摄像头拍摄图像,然后将侦听器添加到摄像头触发的事件,然后在摄像头完成捕获图像后开始下载图像。
事件从未触发,所以我目前无法从相机下载图像。
将侦听器绑定到函数并告诉相机拍摄图片的代码位于按钮的服务器端代码中。
基本上我想知道如何能有一个事件监听器的东西在服务器上的变化,如所附的相机的状态。服务器端事件与ASP.NET混淆

+0

你在回发上绑定事件处理程序吗?如果没有,该事件不会触发您的处理程序。 – 2009-06-25 13:24:20

回答

1

我希望你有这个问题。例如,我敢打赌,相机一次只假设一个桌面应用程序正在使用它。从Web应用程序中调用它是非常不同的,因为每个请求都可能来自不同的用户,并且可能与摄像机正在进行的操作无关。

我建议您通过Windows服务与相机进行通信。该服务将通过Windows服务中托管的WCF服务与Web应用程序进行通信。它会告诉相机拍摄图像,并将附加到该事件。事件触发时,它会从相机下载图像并将其返回给Web服务的调用者。

WCF服务可能必须确保一次只有一个用户正在使用相机。如果相机已被使用,则必须拒绝该通话。

0

服务器端事件捕获可能会有点棘手。我已经完成了这一段时间,所以我完全从我的迷雾中记录...

从页面类中附加到服务器端事件会引发类的生命周期问题。一旦页面交付后,类的实例不再处于范围内,因此无论您分配给相机的事件处理程序是否不再在范围内。我们使用了两种不同的机制来处理这个问题。

A)为事件处理程序分配一个静态方法。静态方法不绑定到类的特定实例,并且即使在页面实例不在作用域中后,该静态方法也会保留。

B)在GLOBAL类中分配一个方法来捕获应用程序(或会话)_Start事件上的事件。这将事件处理程序保持在页面类的范围之外。

无论是哪种情况,您的事件处理程序都需要设置一些可以全局读取的标志以指示图像已准备就绪,并且您的页面需要轮询页面(或处理程序)或刷新以查找图像准备好了。

您还需要查看相机API类实例的范围。如果该类被实例化为页面类的成员,那么只要页面完成,它就会从地球表面掉落,这样做并不会引发事件。相机类将需要静态,全局或衍生到另一个独立的线程。

希望我的雾羚羊帮助。祝你好运。