您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > Web服务可视化的研究
Web服务可视化的研究[日期:2006-05-23]来源:作者:[字体:大中小]王卫民郭鸣苏德富摘要可视化不仅是语言环境的发展趋势,还是组件开发的方向。Web服务[1]作为一种组件开发技术,其可视化也是一个值得研究得课题。本文首先分析了ClausBrabrand博士在他的博士论文《DomainSpecificLanguagesforInteractiveWebServices》[2]中提出的观点,在此基础上,提出了基于文件下载机制的Web服务可视化解决方案,最后改进了该方案,提出了基于窗体自动生成的Web服务可视化改进方案(WSVL)。关键词DSL,Web服务,可视化1DSL的概念DSL[3][4][5][6]是DomainSpecificLanguage(领域专用语言)的缩写。DSL是一种用于解决特定领域问题的计算机编程语言,它提供了该领域合适的、固定的抽象概念和符号。DSL通常比较小,侧重于声明而不是过多的规则或命令,并且比通用目标语言(GPLGeneralPurposeLanguage)的表达能力要差。比如,DSL不能操纵复杂的数据结构。所以领域专用语言也曾被称为应用领域语言、“小”语言或宏语言,与脚本语言紧密相关。像大家熟悉的SQL、Unixshells、makefiles等可以视为领域专用语言[7]。目前领域专用语言的应用已经渗透到各种领域,如图形图象、金融产品、电话交换系统、各种协议、操作系统、设备驱动程序、网络中的路由器和机器人语言等。由于DSL在领域级别上的高度抽象性,使得其更易于编程、易于验证,提高了产品的生产力、可靠性、可维护性和可移植性,并且可以实现系统级的重用。2DSLforWS的基本思想ClausBrabrand博士在他的博士论文中,将DSL语言应用于交互式Web服务的研究中,获得了一个有效的解决方案。他的主要思想是:当Web应用程序调用Web服务时,该服务可以动态地产生HTML文件,该HTML文件可以被浏览器所解释,转换成相应的Web窗体和服务器端组件代码,这样就可以实现Web服务与客户端Web应用程序的交互。ClausBrabrand博士采用了DSL来完成这个过程。论文从四个关键的方面来阐述了他的主张,它们是交互式会话管理、动态HTML/XML的产生、窗体字段验证和并发控制。但是,我们知道,所有的应用程序分两大类,Web应用程序和桌面应用程序。Web服务的使用者不仅仅是Web应用程序,更应该是桌面应用程序。否则,就根本不需要Web服务这种技术了。因为传统的Web应用程序就可以满足和客户端Web应用程序的通信了,且交互性更优。当Web服务的使用者是桌面应用程序的时候,ClausBrabrand博士提出的方案显然就满足不了组件可视化的需求了。同时ClausBrabrand博士主要是从交互式应用的角度来考察Web服务的交互能力的,我们知道,交互并不一定是可视化的。现在我们需要从可视化的角度来重新考察这个问题。3Web服务可视化的研究可视化的组件比非可视化的组件更好用,更易于维护。当任何一个动态库成了组件,就希望成为可视化的控件,Web服务组件也不例外。该文主要研究了如何将Web服务可视化的问题。提出了自己的一些设想,并在一个Web服务中间件的开发中使用了这种设想。我们首先提出了基于文件下载机制的可视化实现方案,然后改进这个方案,提出了WSVL解决方案。图1传统的Web服务调用过程图1显示了传统的Web服务的调用过程。我们以一个实例来说明这个过程,比如一个远程的Web服务组件WSAuthentication,该组件有一个认证操作,boolAuthentication(stringusername,stringpassword)的操作,其结果是验证传递的用户名和密码,返回验证的结果true或false。我们添加了相应的Web服务之后,我们就可以使用这个组件了。为了客户可以自己输入用户名和密码,我们需要建立一个窗体,它有两个文本框,一个输入用户名,设为EditName,另一个输入密码,设为EditPassword,有两个按钮,一个是“确定”按钮,另一个是“取消”按钮。我们编写确定按钮事件如下:WSAuthenticationtheWSAuthentication=newWSAuthentication();//建立Web服务对象boolb=theWSAuthentication.Authentication(EditName.text,EditPassword.text);//向这个对象发送消息,要求认证。MessageBox.Show(b.ToString());//显示认证结果。这就是一个完整的Web服务组件的使用过程。但是,在这个过程中,我们发现:第一,这个界面非常特殊,完全可以由客户端或服务器端自动生成;第二,这个过程直接暴露了Web服务的操作。这显然是很不安全的。为了解决这两个问题,同时实现组件的可视化,我们对这个调用过程改进如下图2所示:图2改进的Web服务调用过程在这个过程中Web服务客户端之前增加了Web服务界面层,由它负责调用Web服务的功能。现在的问题是这个Web服务界面从哪里来,针对Web服务界面的来源,我们有两种不同的设计方案。1)基于文件下载的解决方案第一种就是基于文件下载的解决方案。这种解决方案的最大特点是,界面从Web服务端下载下来。界面可以是语言相关的窗体代码,也可以直接是二进制代码,比如可执行文件。这两种文件的传送方式是不一样的。窗体代码可以采用XML文件的形式传送,二进制代码则不行。在这里我们仅仅讨论二进制代码的传送。首先,我们需要在客户端编写程序,它可以将字节流数组转换可执行文件,并运行,返回调用结果。void*ExecByte(byte[]);第二,我们需要在服务器端编写每一个Web服务对应的界面程序。第三,我们在服务器端编写一个额外的文件下载服务方法。它可以将指定的文件转换成字节流传送到客户端。byte[]DownLoad(stringfilename);第四,同时我们编写统一的服务调用操作,它会将方法对应的程序转换成字节流。byte[]Show(stringmethodname);这样,Web服务的调用过程变成了:WSAuthenticationtheWSAuthentication=newWSAuthentication();//建立Web服务对象bool*pb=bool*(ExecByte(theWSAuthentication.Show(“Authentication”)));MessageBox.Show((*pb).ToString());//显示认证结果。其中theWSAuthentication.Show(“Authentication”)将认证操作对应的可执行文件转换成字节流,并传送到客户端。ExecByte将该字节流转换成可执行文件,并执行。执行的结果是,屏幕上将出现一个标准的对话框,提示你输入用户名和密码,你输入用户名和密码后,点击确定按钮按钮将调用真正的认证操作,认证操作的结果保存到pb中,如图3所示。图3认证对话框在该方案中,第一步需要的程序可以直接在开发环境或操作系统中提供;第二步的界面,第三步的下载服务,第四步的统一的服务调用操作都可以由Web服务开发工具自动生成。该方案的优点:(1)大大提高Web服务的安全性;(2)更强的交互能力和统一的调用方式;(3)它还有一个不可忽视的优点是Web服务操作的界面上可以承载广告,费用信息等内容。缺点:(1)服务器要传送大量的程序;(2)由于从Web服务所在的服务器上下载文件直接运行,对客户端来说是不安全的;解决的方法是观察Web服务界面的统一特点,由客户端自动生成界面代码。这就是下面的WSVL的解决方案。2)改进的解决方案WSVL以上的做法值得改进,原因有二:一、服务器端需要编写多个与Web服务相关的额外的程序;二、该程序需要下载到本地,同时在本地要有一个函数来处理这些程序。我们改进这些过程,原因是客户完成Web服务的添加之后就可以知道Web服务有关方法的实现接口,客户端完全可以根据这些接口生成相应的界面和对应的处理程序。例如上述的认证操作,它的界面上将有两个label,一个label的caption是用户名,另一个的caption是密码;有两个edit,窗体有两个数据成员,它们是WebServicesObject,保存这个Web服务对象,另一个是result,保存服务调用的结果。这两个变量都是可变对象;有两个按钮,一个确定按钮按钮,一个取消按钮按钮。一个确定按钮的程序是:thisform.result=thisform.WebServicesObject.Authentication(editusername.text,editpassword.text);thisform.hide;另一个取消按钮的内容是:editusername.text=“”;editpassword.text=“”;我们以伪码来表示窗体设计模式:图4窗体模式文件图示模式Form(list,operate,WebServiceType,Type)//模式有五个参数,list表示Web操作的参数名称数组;operate对应Web操作的名称,WebServiceType表示了该操作对应的Web服务的类型。Type则表示该操作的返回值的类型,如图4所示。根据list数组的个数n,界面上将有n个label和n个edit框。其中label的名称由label连接list[i]组成,它的caption属性为list[i],同样edit的名称由edit连接list[i]组成。i从0开始到n-1:Label:名字为lable+List[0],显示为List[0]Label:名字为lable+List[1],显示为List[1]…………..Label:名字为lable+List[n-1],显示为List[n-1]Edit:名字为Edit+List[0]Edit:名字为Edit+List[1]…………..Edit:名字为Edit+List[n-1]有两个变量:一个是Web服务对象,另一个是返回值类型的对象:WebServiceTypeWebServicesObject;Typeresult;有两个按钮,确定按钮和取消按钮。确定按钮的程序:(这里用EditI代表第I个文本框的名字。)result=(Type)WebServicesObject.operate(Edit.text,Edit2.text,…..,Editn.Text);thisform.hide;取消按钮的程序:edit1.text=“”;edit2.text=“”;……………………editn.text=“”;最后是窗口布局。/////////////////////////////////模式结束我们可以将该设计模式用XML模式文件表示[29]。在VisualStudio.Net中可以用设计模式来表示[30]。在添加Web服务时,让客户端环境中的窗体生成向导来处理这个模式文件,生成所有的窗体文件。生成的窗体文件将有两种形式:可执行文件或环境有关的窗体代码,如果是第一种,处理与上相同,否则处理的时候就完全可以把它当成一个可视化的组件。这就实现了设计时的可视化,这时,我们可以改进生成的窗体的布局,改进界面设计。实现了设计时的可视化后,仅仅需要在设计时添加属性值就行了。编译时这些程序就会和程序员编写的程序一起被编译。WSVL将有两个部分组成,如图5所示。图5WSVL组成图示一部分是模式文件,它能根据输入的参数产生具体的窗体;另一部分是窗体生成向导。该向导在添加引用时被激发,让用户在选择了要添加的Web服务之后,选择要产生窗体的Web方法,然后该向导就以选中的Web方法的参数列表、它的方法名字、Web服务类型以及返回值类型为参数,执行窗体模版,形成所需的窗体文件。方案的分析:优点:显然,它可以解决基于文件下载机制所带来的不足。缺点:这个方案还有待完善。生成的窗体文件太多也将造
本文标题:Web服务可视化的研究
链接地址:https://www.777doc.com/doc-1580741 .html