智能客户端是怎么实现的?步骤是什么?

dl_wang 2009-04-14 04:54:38
如题
...全文
222 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dl_wang 2009-04-15
  • 打赏
  • 举报
回复
up
dl_wang 2009-04-14
  • 打赏
  • 举报
回复
谁有详细的开发步骤,如:如何创建智能客户端?如何部署等等。最好有源码参考。谢谢
moonshineidolon 2009-04-14
  • 打赏
  • 举报
回复
智能客户端技术实现

智能客户端程序一般都具有偶尔性连接的特征,所以我着重讲述偶尔连接的智能客户端应用程序。同时,其与网路的通讯又有四种方法—— Enterprise Services,.NET remoting,Message Queuing(消息队列)和Web services。基于普遍的观点——Web 服务是生成大多数智能客户端应用程序的最佳方法。故在针对面向服务的方法和面向数据为中心的方法的选择中,我决定选择前者,因此,我重点讲述以Web Services作为首选通讯方式,面向服务的智能客户端技术。

设计面向服务的智能客户端技术,关键要解决如下几个问题,为使讲述清晰,我将以一个案例作为例子。

我们要实现这样一个购书软件(姑且命名为BuyBook),服务端有数据库,包含两张数据表。一张表简单的描述了书籍的价格,这些价格是变动的,管 理员可以通过工具对里面的数据进行改动;另外一张表则是书籍的订单,记录着订购者ID,订购书的ID和订购数量。两表只有书的ID作为主外键关联着。服务 端还创建了必要功能的web服务,以供客户端调用。

下面继续接着讲面向服务的Smart Client技术关键解决的几个问题。

1) 连接的管理

智能客户端软件当然不能过于频繁地访问网络上的服务端,因为这样会严重影响软件的性能,另外,对于连接发生的更改(包含如手动连接、自动连接、连接意外中断和连接长期不用等情况)软件也要作出相应的反应,以体现其智能的特点。

那么关于连接的管理有些什么适合的方案呢,我将以我举的范例为例,设计其在这方面的处理方法。

BuyBook应该尽量避免和网络上的服务端进行交互,即使网络连接可用。可以优先假设为离线操作,在机器本地进行事务处理,当然这样会造成一定的 问题,有可能系统数据没有和服务端数据同步,导致本地操作无效。如服务端书本的价格作为系统参数保留在本地,当系统的数据变化时,用户在客户端看到的书本 的价格就不是真实的行情了。所以虽然优先离线操作,也要考虑到数据出现不一致的情况,在数据冲突处理会得到详细解答。

在一些特殊的例子中,如购买股票的情况,由于股票的行情是不断变化的,所以,为使本地数据能体现真实的情况,网络连接应该采用隔时便来一次与服务端 交互的动作,这个“隔时”的时间长度,可以用户自定义,也可以是系统默认。

我们还可以提供给用户这么一个功能,他只需点一个按钮,发送出一个访问服务端的命令,这时连接建立,并保持这个连接,直到手动断开,或网络不可用。 我们称之为“手动连接”,与之相对应的是“自动连接”,当连接可用时,保持连接状态,将缓存中的数据处理,发送到服务端,并获取服务端最新的一些共用系统 参数。

总而言之,对于连接,在设计系统时要把它看作是奢侈品,优雅的对待网络,无论网络处于什么状态,用户的数据操作都可以放在本地缓存。

2) WEB服务的交互

面向服务的智能客户端应用程序,通过网络与服务端的交互工作重点就在于web service上。按照前面所言,应该减少这种服务端上的远程交互,可以将本地操作缓存,并且在与web服务交互过程中,不必等待返回信息,在这延迟中可 以进行其他的操作。那么要实现这种延迟不影响工作的功能,最有效的办法就是使用异步通讯的方式,可以考虑使用多线程。

WEB服务使用XML技术,CRUD(Creat Read Update Delete)类型的数据库操作,可以都通过Web Service。那么,就要讲究Web Service里交互方法的定义了。当客户进行一个Create操作时,可能关联到系统参数,例如BuyBook应用程序,当客户提交订购单时,Web服 务应该先检查本地的商品价格与服务端的价格是否一致,如果价格已经不同,应该提示客户更新最新的价格,然后再作订购行为的判断。Upate和Delete 操作,很可能导致数据冲突。例如删除动作,应该在客户端上将相关记录标记为暂时删除,然后在服务器上将删除请求排队。服务端进行删除时一定要检测是否有数 据冲突,如果出现冲突,还要进行数据冲突的处理。

3) 本地数据缓存

智能客户端为了能及时地响应用户的操作,同时也是为了满足脱机离线工作的需要,就必须将常用的固定的服务端数据缓存到本地。

如果连接是处于在线状态的,本地数据可以暂时保存在内存中,ADO.NET里的DataSet本身就是可以用内存临时存储的数据对象,数据在内存中 存储只是一个临时过渡,当数据需要经过操作后保存回远程数据库时,方法可以使用DataSet的数据适配器DataAdapter将变化的量返回数据库操 作,这样既加快了本地的反应又节省了带宽。

如果,应用程序在断线的状态下工作,则将数据保存回本地的数据存储结构,待再次连线时,装载进DataSet,进行处理。

4) 数据冲突处理

造成数据冲突最常见的原因包括用户在执行更新或删除数据的操作时,有可能该数据已经被删除掉了,这样应用程序找不到更新或删除的项,自然就会引发异 常而出错。处理这样的情况,可以采用一个简单的办法,数据适配器DataAdapter能对DataSet变化进行判断——当数据往数据库返回时, DataAdapter的Update方法可以检查DataSet里每个DataRow的RowState,从而可以判断该DataRow是最新的,还是 已修改或已经删除的,然后执行适合的数据库操作,像找不到数据的那种情况,DataAdapter将得知数据库受影响的行数不大于零,并产生异常,从而停 止更新。然后,应用程序就可以通过这个异常来处理数据冲突。

处理办法是,如果服务端已经不存在用户需要删除的原始数据,那么,只要将客户端的该条数据删除。如果用户是对该数据进行更改,可以先检测服务端的数据,看是否存在,倘若不存在,则通知用户,并视用户的操作无效,同时将本地的那条过期数据删除。

总结:

智能客户端技术是颇有前途的下一代客户端技术,它能够在有网络连接和网络断开的情况下灵活地工作。对用户而言,这将是新的一种软件使用体验,能同时 拥有C/S模式软件快速的反应、丰富的用户界面体验和瘦客户端模式那样简单的部署,升级。对开发者而言,开发的难度变大了,考虑的方面多了,但还是有灵活 的方案可供选择,还可以结合.NET技术,使用面向服务或面向数据的解决方案,在开发中,要着重解决“连接的管理”,“WEB服务的交互”,“本地数据缓 存”和“数据冲突处理”的技术点

智能客户端(布属方式)
ClickOnce 是一种部署技术,该技术支持可以通过最低程度的用户交互来安装和运行的自行更新的基于 Windows 的应用程序。ClickOnce 是 Visual Studio 2005 中所包含的全新的 Windows 窗体部署技术。该技术使用智能客户端简化 Web 应用程序的安装和升级。
ClickOnce 是一种部署技术,使用该技术可创建自行更新的基于 Windows 的应用程序,这些应用程序可以通过最低程度的用户交互来安装和运行。ClickOnce 部署克服了部署中所固有的三个主要问题:
更新应用程序的困难。 使用 Microsoft Windows Installer 部署,每次应用程序更新,用户都必须重新安装整个应用程序;使用 ClickOnce 部署,则可以自动提供更新。只有更改过的应用程序部分才会被下载,然后从新的并行文件夹重新安装完整的、更新后的应用程序。
对用户的计算机的影响。 使用 Windows Installer 部署时,应用程序通常依赖于共享组件,这便有可能发生版本冲突;而使用 ClickOnce 部署时,每个应用程序都是独立的,不会干扰其他应用程序。
安全权限。Windows Installer 部署要求管理员权限并且只允许受限制的用户安装;而 ClickOnce 部署允许非管理用户安装应用程序并仅授予应用程序所需要的那些代码访问安全权限。
如此一来我们不必去牺牲 Windows 窗体丰富的用户界面和响应性而去采用Web方式。通过使用 ClickOnce 来部署应用程序,使得应用程序集Web与Windows的优势于一身。
tianke3477 2009-04-14
  • 打赏
  • 举报
回复
不知道什么是智能客户端
dl_wang 2009-04-14
  • 打赏
  • 举报
回复
up

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧