分享

利用Flex+WCF实现Web在线考试实时监控 - Web开发 - 中国软件产业链网-最权威软件产业垂直门户

 goodwangLib 2011-05-18
利用Flex+WCF实现Web在线考试实时监控
2010-09-14 15:56:00 来源: 作者: 【 】 浏览:236次 评论:0

  一、介绍
  为了实现在线考试系统的远程监管,保证考试的公平、公正性,一个有效的视频实时监控系统显得非常重要,但是Web在线考试不同于传统的具有固定考场的考试,考生在任何有网络的地方都可以登录系统参加考试。因此,在线考试系统不能通过在固定场地安装摄像头等手段来实现视频监控,只有通过考生参加考试时所使用的计算机来实现监控。因此,有必要在在线考试系统中集成实时监控系统来保证考试的有效性。
  目前,Web在线考试监控系统概括起来大致可以分为以下两类:一类是在线监控系统独立于在线考试系统,即考生在参加考试应同时启动相应的监控程序来实现监控。此类系统的优点是功能强大,缺点是需要在客户端和服务器端安装相应的软件或者组件,部署复杂,此外还需要价格不菲的软、硬件购置费用。另一类是浏览器插件技术,也就是Object ActiveX技术,即通过在客户端浏览器上安装相应插件来实现,这种技术可能也需要服务端组件或者中间件来支持。这类系统的优点是部署方便,对客户端没有过多限制,缺点是功能会相对减弱,如果使用第三方插件,也需要软件或者硬件费用。
  为了克服上述方法的一些缺点,在笔者单位自主研发的在线干部测评系统中,我们利用了最新的Flex和WCF技术来实现Web在线考试系统的实时监控。
  Flex是RIA(Rich Internet Applications,即富客户端)的一种技术实现,它由Adobe公司出品,开发工具包是Flex Framework,集成开发工具可以用Flex Builder,所用的编程语言是ActionScript,其程序经过编译后生成SWF文件,传送到客户端,由客户端的Flash Player或者Shockwave Player解释执行,给用户以丰富的体验。而Adobe Flash Player是目前网络上通用的动画播放插件,客户端只要能够连接互联网就能自动安装Flash播放器,因此不存在客户端插件部署问题。
  WCF(Windows Communication Foundation)是一个统一的编程框架,可用于建立安全可靠的、面向服务的、应用高效的开发平台。在Windows平台下,尤其是在.NET平台下开发面向服务的应用程序,或者开发分布式系统,最佳选择就是WCF。原因在于WCF涵盖了之前微软推出的所有用于分布式开发的技术,包括Remoting、Web Services、WSE、MSMQ等,并以一种统一的编程模式来实现。WCF既支持具有互操作性的Web服务,也能够实现.NET客户端与.NET服务端的通信,提供了分布式事务的支持,同时在安全性上,它完全遵循了WS-*标准,此外,它还支持队列服务,可以非常方便地利用消息队列完成异步操作与脱机调用。而这些功能,以前的技术都只是部分实现。
  利用Flex炫丽的富客户端实现技术,结合WCF强大的客户端和服务端交互功能,我们就可以很方便地实现Web在线考试的实时监控,具体的系统架构和实现将在下文详细介绍。
  二、系统架构
  基于Flex和WCF的Web在线考试实时监控系统架构,如图1所示。客户端视频监控模块通过Flex技术来实现,通过客户端浏览器内嵌的Flash播放器来运行视频监控程序。客户端监控模块通过WCF将监控信息发送给服务端,服务端将接收到的信息通过服务器端的人脸识别引擎比对用户信息数据库,如果比对成功,给客户端发送匹配成功指令,客户端正常考试,如果匹配失败,给客户端发送失败指令,客户端将收到相应的警告或者处罚,同时将违纪信息进行记录。在系统构架图中,所有客户端与服务端之间的交互通信(对应①④),以及服务端与服务端(对应②③)之间的交互通信都通过WCF来实现。


  三、系统程序的实现
  1.Flex+WCF+Visual Studio 2008开发环境的搭建
  虽然,Flex可以直接调用.NET平台的WCF或者Web Services等组件或类来完成Flex与.NET服务端的通信,但其缺点是通信数据量较小,如要传输大量的数据或是实现不同对象的序列化传输,则满足不了需求。由于在我们的系统中需要传输视频和图像数据,通过Flex直接调用WCF可能会产生序列化问题。为了更好地协同Flex与.NET之间的通信,我们还需要引入第三方的开源项目FluorineFx,它是专门针对.NET平台与Flex通信提供的AMF(ActionScript Message Format)协议通信网关,我们可以通过FluorineFx很方便地完成与.NET的通信。FluorineFx官方提供了安装包的下载和在线文档,可以帮助我们有效地利用FluorineFx来开发。使用Visual Studio 2008、FluorineFx和Adobe Flex Builder 3开发系统的具体步骤如下:
  (1)使用Visual Studio 2008结合FluorineFx来开发服务器端的WCF和承载网站。
  首先,通过Microsoft Visual Studio 2008创建解决方案,并添加FluroineFx服务器库,如图2所示。
  FluorineFx服务库添加成功后,项目模板会自动创建一个如下的Sample类和一个Echo方法:
   namespace FlexDotNet.SvrLib
  {
  [RemotingService("Fluorine sample service")]
  public class Sample
  {
  public Sample()
  {}
  public string Echo(string text)
  {
  return "Gateway echo: " + text;
  }
  }
  }
   接着添加FluorineFx网站到解决方案,添加成功后网站会自动引用FluorineFx服务库的dll。如图3所示。
  通过上面两步,系统的服务端及调用服务端的网站程序的框架已经构建完成。
  (2)使用Adobe Flex Builder 3开发客户端视频监控模块。
  Adobe Flex Builder 3是用于构建和维护在所有主要浏览器、桌面和操作系统一致部署的极具表现力的 Web 应用程序的高效率开放源码框架。通过Adobe Flex Builder 3可以很方便地设计视频监控模块,编译成功后生成SWF文件,然后通过客户端浏览器的Flash播放器执行该SWF文件。其开发设计界面如图4所示。
  2.系统实现的关键代码
  图5是笔者自主研发的集成了视频实时监控的在线干部测评系统考试界面截图。系统实现中的两段关键代码如下:


  (1)客户端提交视频截图代码
  var nc:NetConnection=new NetConnection();
  var rd:Responder=new Responder(Saved,noSaved);//处理返回值的两个函数一个成功,一个接管失败的。
  nc.objectEncoding = 3;//Fluorine必要的编码的版本
  nc.connect("http://192.168.88.47:2088/web/Gateway.aspx");//fluorineFx的入口,该入口接管了所有的请求
  m_pictureData = "";
  for(var i:int = 0; i < DEFAULT_CAMERA_WIDTH; i++){
  for(var j:int = 0; j < DEFAULT_CAMERA_HEIGHT; j++){
  if(m_pictureData.length > 0)
   m_pictureData += "," + m_pictureBitmapData.getPixel32(i,j).toString();
  else
   m_pictureData = m_pictureBitmapData.getPixel32(i,j).toString();
  }
  }
  nc.call("FlexDotNet.SvrLib.Sample.SavePicture",rd,DEFAULT_CAMERA_WIDTH,DEFAULT_CAMERA_HEIGHT,m_pictureData,value);//调用服务端的WCF服务
  (2)服务端接收并保存客户端提交视频截图数据代码
  public string SavePicture(int pic_width, int pic_height, string bitmap_data,string flagid) {
  Bitmap m_pic = new Bitmap(pic_width, pic_height);
  string[] m_tempPics = bitmap_data.Split(',');
  for (int i = 0; i < pic_width; i++){
   for (int j = 0; j < pic_height; j++){
  uint pic_argb = (uint)long.Parse(m_tempPics[i * pic_height + j]);
  int pic_a = (int)(pic_argb >> 24 & 0xFF);
  int pic_r = (int)(pic_argb >> 16 & 0xFF);
  int pic_g = (int)(pic_argb >> 8 & 0xFF);
  int pic_b = (int)(pic_argb & 0xFF);
  m_pic.SetPixel(i, j, Color.FromArgb(pic_a, pic_r, pic_g, pic_b));
   }
   }
   m_pic.Save(fileName, System.Drawing.Imaging.ImageFormat.Png);
   return "保存成功" + fileName;
  }
  四、结束语
  本文利用Flex和WCF技术实现了Web在线考试系统的实时监控,该方法使用目前网络上最流行的Adobe Flash Player作为客户端插件,无需在服务器端和客户端安装任何额外的插件或者软件,更不用支付购买第三方软件费用,具有很高应用价值。将视频实时监控集成到Web在线考试系统平台,可以远程对在线考生实施监控,从一定程度上防止了考试过程中的舞弊现象,加强了考试的公正性和公平性。  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多