在过去的几年时间里,我们见证了软件开发团队从Windows开发平台到Web开发技术(包括HTML、ASP、JSP、DHTML、ColdFusion和PHP等等)的大规模迁移。直到目前为止,Web开发的好处还没有受到批评。
最近,微软公司的.NET平台发布了一个名为非接触配置(No Touch Deployment,NTD)的新技术。NTD技术会让大批开发者从Web开发回到Windows窗体开放——NTD应用程序可以在Internet上运行而无需接触用户机器。它提供了Web开发的所有优点而无需牺牲用户界面设计,也没有Web开放所带来的困难。现在,天平又开始向微软公司这一侧倾斜了,你的下一个项目可能完美合适NTD。
Web开放的优点
在介绍复杂的NTD技术之前,让我们先讨论一下Web展开模型的优点和缺点。它的优点主要体现在两个方面:配置的成本和目标机器。
配置成本
配置Windows应用程序相对来说要付出更多的努力。Windows应用程序在初始安装、随后的升级、以及对客户机器的总体管理等方便的成本是驱动我们选择Web程序的原因之所在。
目标机器不受影响
Web展开模型使得客户机器的性能对Web应用程序的影响很小(即“瘦”客户),只要考虑客户端的浏览器就可以了。这一点非常有利,因为它不要客户安装任何软件就可以运行应用程序。由于目标机器不被触及,用户在运行他/她不太信任的应用程序时,也不会感觉别扭。它降低了成功运行某个程序所需要经验的要求。
第三个好处就是它的开发是平台无关的,与各种浏览器之间“战争”无关。但是,专有技术(如HTML扩展、COM、ActiveX和XML数据岛等)极大破坏了这个优势。事实上,除非你的网站全部用HTML实现,否则你的开发必须针对特定浏览器,然后期望其它浏览器也支持你的Web应用程序。
Web开发的缺点
Web应用程序所带来的优点并不是没有付出代价的。实际上,Web应用程序也有几个很明显的缺点,如有限的用户体验(user experience)。很难让人信服Web可以提供比Windows应用程序更丰富的用户界面。Web目前已有的控件和Windows比起来是非常有限的。在Windows应用程序中实现滑动块控件、spin框和颜色框很容易,但是在Web应用程序却是另一回事了。
非接触配置
一年前,我不愿意涉及除基于Web(即HTML、ASP.NET等)之外的其它项目。现在,我接触了好几个Windows表单应用程序的开发。这些应用程序的用户是网络用户,它们用到了NTD技术。有些人喜欢把NTD与Java Web Star相对比,它们在某些方面也确实有相似之处;不过,NTD技术提供了完整的可配置的代码访问安全机制(code access security,CAS),就这一点来说,它的功能比Java Web Start更强大。
代码访问安全(CAS)
按照微软的说法,CAS是“通用语言(common language)所提供的一种机制,被管理的代码由安全策略授予一定的许可,许可是强制的,限制了代码所允许执行的操作范围”。
为了充分获取NTD的优点,理解CAS是必不可少的,这是因为在Internet上展开的应用程序需要在客户机器上获得必要许可才可以正确执行。
非接触展开的例子
让我们看看一个例子,其中可执行代码驻留在本地机器的Web server中。CAS给予驻留在本地机器上的所有可执行代码以全部权限。这与从另一台机器上下载可执行代码的情况不同。所以当你配置(deploy)你的应用程序时,你将配置http://localhost。
假设CodeConference.com希望允许用户使用Windows应用程序来注册会议。该应用程序暂时不再做任何有用的事也不与server进行通信,因为它请求Web服务。该应用程序只是简单的给出了一个带有按钮的页面,当你点击按钮时,它显示出“Hello”。一旦该程序编译后,可执行的CodeConferenceRegistration.exe将作为一个IIS server被拷贝。用户可以在IE地址栏中输入http://localhost/CodeConferenceRegistration.exe浏览该可执行代码的效果。
IE可以识别.exe扩展名,可执行代码通过http下载,通用语言在运行时刻执行该程序。当然,在没有正确配置的情况下,CAS将限制她的运行。
仍有怀疑
不可避免的,那些宣称Java Applets以及Java Web Start已经尝试过配置计划但这两者都没有成功的人会怀疑它不会占据很大的市场份额。持怀疑态度的人提出问题本身并没有错,但是现在的情况和Java Applets出现时的情况不太相同了。
由于Applets需要较高的带宽(那时的情况和现在不同,家庭宽带网尚不普及),所以它没有推广开来。此外,用来实现客户端和服务器通信的技术也没有Web服务那样成熟。NTD的另一个缺点就是它要求客户端机器上也安装.NET框架。而由于.NET应用程序需要在运行时使用通用语言,偏偏大多数客户端机器又没有安装.NET框架。但随着时间的流逝,情况正在好转。