我的silverlight页面包含以下代码:
public camera()
{
InitializeComponent();
cs.CaptureImageCompleted += new EventHandler<CaptureImageCompletedEventArgs>(cs_CaptureImageCompleted);
VideoBrush vBrush = new VideoBrush();
vBrush.SetSource(cs);
vBrush.Stretch = Stretch.Uniform;
Cam.Fill = vBrush;
if (CaptureDeviceConfiguration.RequestDeviceAccess())
{
cs.Start();
}
}
当我从visual studio中运行网站时,此代码工作正常。但是,一旦我部署网站并在Internet Explorer上运行它,我甚至不会被要求获得打开网络摄像头的权限。
发生了什么事?
答案 0 :(得分:1)
根据MSDN:
调用RequestDeviceAccess应该从a的上下文中完成 用户发起的事件。如果进行的呼叫不是来自a 用户启动的上下文,不会抛出异常。但是,对话框是 在这种情况下不显示。 RequestDeviceAccess返回值将是 仍然返回任何先前授予的访问请求或其他的结果 在这种情况下的条件,但否则呼叫是无操作。
因此,您不能在类构造函数上调用CaptureDeviceConfiguration.RequestDeviceAccess(),但应该从用户事件中调用它,例如单击按钮。
在Visual Studio中进行测试之前,您可能之前从用户启动的事件中调用了它。我相信在您将代码移动到构造函数之后,由于之前授予的访问权限,该方法返回true。但是当您发布网站时,浏览器,因为您访问的是其他域,您的应用程序没有授予访问权限。这就是它在visual studio中工作的原因,但不适用于实时服务器。