一、什么是Smart Client
简而言之,Smart Client智能客户端就是这样一种一个可扩展的能集成不同应用的桌面应用程序:它可以无接触部署、即需即装、动态加载,XCopy即可运行而无须修改注册表,可以动态升级、自动更新,可以方便的经Web运行而不用担心防火墙问题并可以方便的离线运用,方便的连接WebServices的Windows应用程序。
二、Smart Client的特点
1.动态加载,即需即装。
应用程序的各个构件之间的相互调用并不采用直接引用的方式,而是采用动态加载,即需即装的方式,有效地降低了对系统资源的消耗。应用软件开发商可根据企业应用系统的公共接口进行开发,然后将应用组件发布在企业的服务器上,客户端应用程序将自动发现并加载该应用组件。
2.更松散的耦合
由于上面第一点所言构件之间的相互调用并不采用直接引用方式,这样系统实现的更松散的耦合,为应用程序升级更新提供了方便。
3.进一步的模块化
由于应用程序的松散耦合特性,使系统的进一步模块化成为可能,新功能、新特性的加入只需要开发出符合接口定义的新模块并添加连接即可。而无须修改重编译现有的程序。
4.零接触部署。
安装时只要将一个主程序文件下载到本地,直接运行即可,无须改变注册表或共享的系统组件,其他应用组件将在第一次运行时自动下载。
5.网络加载应用程序组件
Smart Client的应用程序可以很方便的从网络服务器加载应用程序,而且因为程序及加载是从80端口实现,故无须考虑防火墙问题,这样为企业系统的集中管理提供了方便。
6.自动更新
只需将新版本的程序发布在服务器上,由客户端自动发现最新版本的程序和应用组件,并自动下载和更新。
7.在线与离线均可使用的应用程序
Smart Client应用程序尽管使用网络加载程序集,但一旦加载之后,程序集便被缓存到了本地。当用户至少启动了一次应用程序后,其装配就被下载和缓存到本地内存中了,所以用户就可以离线运行你的智能客户端了(通过转换浏览器到离线工作状态),假设应用程序不需要永久访问Web services或一个共享的数据库就可以运行。
构建智能客户端的最大的好处就是可以离线使用。尽管业务之间的联系越来越紧密,但我们仍不能给企业应用程序提供始终连续的连接。离线式工作方式可以在你重新在线时,自动接收数据和应用程序更新,这种特征是人们很想得到的,但在.NET前,这是很难实现的。同胖客户端一样,智能客户端给客户端分布大量的处理,这就为服务器免除了它在一个基于Web的应用程序中需要承担的负荷。最后,智能客户端采取一种用户希望应用程序采取的工作方式——允许快速数据存取和管理,而不需要不必要的屏幕更新。
8.个性化用户界面
用户可根据喜好自行设置客户端应用程序,配置信息将被保存到服务器上。
9.与WebServices的完美集成
Smart Client应用程序可以与WebServices方便的集成应用,这样便可以轻松享受C/S应用程序的完美用户体验而不需担心防火墙等等的一系列问题。
三、Smart Client的优势
尽管有大量的广告,但瘦Web解决方案并没必要成为所有企业应用程序的未来。不要丢弃用WinForms来构建企业应用程序这种想法,因为企业应用需要集中的分布。下面的这张表格描述了Smart Client和瘦Web解决方案之间的对比:
功能 | 智能客户端 | Web应用程序 |
可以离线工作 | 可以 | 不容易 |
集中的部署 | 可以 | 可以 |
高级的GUI特征 | 有 | 有 |
高性能的GUI | 可以 | 不可以 |
卸载处理到客户端 | 可以 | 有限 |
通过HTTP更新 | 可以 | 可以 |
安全 | 是 | 是 |
不接触客户端安装 | 不是;需要构建用来改变.NET的安全配置的一个加载应用程序(除非你用的是Microsoft Transaction Server或Citrix,但是那样的话,应用程序就只能在线使用) | 是 |
大部分时间只传输数据 | 是 | 不是;结合内容的传输,.NET控件显示在IE中 |
客户端需要.NET Framework | 是 | 不是 |
平台和客户端是独立的 | 不是 | 是 |
适合电子商务或Internet应用程序 | 不是;最适合企业内部应用程序 | 是 |
充分利用客户端丰富的资源 | 可以 | 不能 |
表1 比较两者
通过将只能客户端的功能和web应用程序的功能进行比较,可以简化我们的决策过程。
四、Smart Client的工作模型
应用程序加载器用HTTP从Web服务器上的一个虚拟目录来访问和下载装配。下载后,装配被缓存起来,只有需要的时候才执行它们。
五、Smart Client的安全性问题
1.客户端的代码访问安全(CAS) 说到Web方式直接运行,就不能不谈到代码访问安全性(Code Access Security)问题,如果一个黑客能够说服或者诱使你下载一段代码,而你在很高的权限账户下运行它,那操作系统就对各种危害门户打开。这种情形就是导致著名的宣言“在最小权限下运行”的原因,每个人都应该注意这一点。 但是,.NET Framework提供了比这种单纯的基于身份的安全性更高级的功能。由CLR强制执行的CAS机制允许为代码(实际上是assembliy,.NET Framework中调度和保护的单位)指定基于属性的不同的可信度等级,例如数字证书或源站点或URL。在这种方式下,.NET Framework只允许已知的或受信的源代码执行。 为了让你的智能应用程序运转,你需要改变一些客户端的安全设置——实质上就是通知客户端运行时间相信你的应用程序的装配。一种方法就是将带有你的装配的站点添加到IE中可信任站点清单中,然后用安装在你的管理工具目录下的Microsoft .NET Framework Configuration工具来修改.NET Framework安全设置。打开Framework Configuration工具,右击Runtime Security Policy,然后选择Adjust Security。对于Trusted Sites中指定的所有站点,将信任级别调整到Full Trust。作为选择,你也可以用Framework Configuaration工具来修改安全策略,使它信任你的应用程序的个别装配。右击Runtime Security Policy,选择Trust Assembly。 2.服务器端的身份验证 这里的服务器端的身份验证,实际上就是WebServices的身份验证,虽然说从理论上Forms身份验证也是可行的,但是WebServices既然是一个A2A(Application To Application)的应用程序,那么还是尽量不要用这用更适合于人机交互的身份验证方式为好。 a) Windows身份验证。 使用用户的Windows帐号如域帐号进行身份验证。 b) .Net Passport身份验证 使用与用户相关联的.NET Passport帐号进行身份验证。 c) 自定义身份验证 使用Soap来给Web服务传递账户信息是一个相对使用URL传递装户信息而言比较安全的方式,同时不必为每一个WebMethod传递证书(作为参数的一部份),如果仍然觉得不够安全则可以对Soap头进行加密,或者干脆使用Soap传递安全证书,这里只介绍使用Soap不加密传递用户名和密码进行身份验证的方式当一个服务请求发送到服务端,请求会被WebServiceAuthenticationModule截获,WebServiceAuthenticationModule就开始分析该请求的Soap头,从中解析出客户端发送的用户名和密码,并进行身份验证。如果身份验证通过,WebServiceAuthenticationModule便会给用户签发身份验证票;如果身份验证失败,WebServiceAuthenticationModule便会抛出一个消息为”Access Deny!”的SOAPException,随后服务端和客户端均可截获该异常并进行处理。
六、Smart Client的未来
Smart Client实际上是一个客户端表现层架构,通过抽象这些概念开发人员可以更好地理解现代软件开发的各个层次。它最适合的是.NET平台,而.NET则是微软的战略基础,相信微软在几年内,会有越来越多的应用构建在.NET之上。在未来的几年之内,.NET将成为更加主流的应用平台,作为建立在.NET基础之上的抽象的表现层架构,随着.NET平台的更加成熟,Smart Client也会有更多的用武之地。 VS.NET中最重要的后续产品—代号为“Whidbey”的Visual Studio 2005。VS2005除了在底层类库和IDE提供了更加强大的支持以外,还针对无接触部署引入了引人瞩目的“Click Once”技术。Click Once技术通过使用Smart Client简化 Web 应用程序的安装和升级,从而给开发人员提供了更好的部署更新应用解决方案。Click Once基本上具有UAB和OAB的所有优势,使许多编码工作只要通过简单地配置项目属性即可完成,同时,它还具有一些新增功能。它最大的特点在于代码访问的安全性(CAS),从而保证应用程序在一个更加安全的环境中完成部署和更新。Click Once是.NET运行库(CLR)中的一组功能与VS .NET中集成的design-time support(设计时支持)功能的组合。总之,使用该功能以及IDE工具,在部署、启动和更新应用程序方面具有很大的灵活性。通过Click Once可以极大地简化更新部署应用解决方案,同时也提供了更加强大的安全选项。 任何技术都是应用催生的,Smart Client也是如此。在经历了C/S、B/S之后,是否真正步入了Smart Client时代呢?结论为时尚早。相信在这场变革中,Smart Client将为更多企业应用系统的开发带来助力。