高手们:
   1、小弟才入门,请教如何用VC++写三层结构的服务器程序?是指用哪个向导生成,有
 些什么要注意的?
   2、三层结构的服务器程序写好后,在客户程序中如何调用?

解决方案 »

  1.   

    你实际上就是要编写COM组件。用ATL COM AppWizard。不过编写起来很复杂哦。
      

  2.   

    三层C/S结构及其应用开发
    一、三层C/S的基本硬件结构  传统的二层C/S结构存在以下几个局限:1它是单一服务器且以局域网为中心的,所以难以扩展至大型企业广域网或Internet;2受限于供应商;3软、硬件的组合及集成能力有限;4难以管理大量的客户机。因此,三层C/S结构应运而生。
      三层C/S结构是将应用功能分成表示层、功能层和数据层三部分。其解决方案是:对这三层进行明确分割,并在逻辑上使其独立。原来的数据层作为DBMS已经独立出来,所以关键是要将表示层和功能层分离成各自独立的程序,并且还要使这两层间的接口简洁明了。
      将上述三层功能装载到硬件的方法基本上有三种(如图1所示)。其中表示层配置在客户机中,而数据层配置在服务器中。    一般情况是只将表示层配置在客户机中,如图1(1)或图1(2)所示。如果像图1(3)所示的那样连功能层也放在客户机中,与二层C/S结构相比,其程序的可维护性要好得多,但是
    其他问题并未得到解决。客户机的负荷太重,其业务处理所需的数据要从服务器传给客户机,所以系统的性能容易变坏。
      如果将功能层和数据层分别放在不同的服务器中(如图1(2)所示),则服务器和服务器之间也要进行数据传送。但是,由于在这种形态中三层是分别放在各自不同的硬件系统上
    的,所以灵活性很高,能够适应客户机数目的增加和处理负荷的变动。例如,在追加新业务处理时,可以相应增加装载功能层的服务器。因此,系统规模越大这种形态的优点就越显著。
    值得注意的是:三层C/S结构各层间的通信效率若不高,即使分配给各层的硬件能力很强,其作为整体来说也达不到所要求的性能。此外,设计时必须慎重考虑三层间的通信方法、通信频度及数据量。这和提高各层的独立性一样是三层C/S结构的关键问题。
    二、三层C/S的功能1. 表示层
      表示层是应用的用户接口部分,它担负着用户与应用间的对话功能。它用于检查用户从键盘等输入的数据,显示应用输出的数据。为使用户能直观地进行操作,一般要使用图形用户接口(GUI),操作简单、易学易用。在变更用户接口时,只需改写显示控制和数据检查程序,而不影响其他两层。检查的内容也只限于数据的形式和值的范围,不包括有关业务本身的处理逻辑。
    图形界面的结构是不固定的,这便于以后能灵活地进行变更。例如,在一个窗口中不是放入几个功能,而是按功能分割窗口,以便使每个窗口的功能简洁单纯。在这层的程序开发中主要是使用可视化编程工具。
    2. 功能层
      功能层相当于应用的本体,它是将具体的业务处理逻辑地编入程序中。例如,在制作订购合同的时要计算合同金额,按照定好的格式配置数据、打印订购合同,而处理所需的数据则要从表示层或数据层取得。表示层和功能层之间的数据交往要尽可能简洁。例如,用户检索数据时,要设法将有关检索要求的信息一次传送给功能层(参见图2),而由功能层处理过的检索结果数据也一次传送给表示层。在应用设计中,一定要避免"进行一次业务处理,在表示层和功能层间进行多几次数据交换"的笨拙设计。
    通常,在功能层中包含有:确认用户对应用和数据库存取权限的功能以及记录系统处理日志的功能。这层的程序多半是用可视化编程工具开发的,也有使用COBOL和C语言的。3. 数据层
      数据层就是DBMS,负责管理对数据库数据的读写。DBMS必须能迅速执行大量数据的更新和检索。现在的主流是关系数据库管理系统(RDBMS)。因此,一般从功能层传送到数据层的要求大都使用SQL语言。
    三、三层C/S结构的优点1. 具有灵活的硬件系统构成
      对于各个层可以选择与其处理负荷和处理特性相适应的硬件。这是一个与系统可缩放性直接相关的问题。例如,最初用一台Unix工作站作为服务器,将数据层和功能层都配置在这台服务器上。随着业务的发展,用户数和数据量逐渐增加,这时就可以将Unix工作站作为功能层的专用服务器,另外追加一台专用于数据层的服务器。若业务进一步扩大,用户数进一步增加,则可以继续增加功能层的服务器数目,用以分割数据库。清晰、合理地分割三层结构并使其独立,可以使系统构成的变更非常简单。因此,被分成三层的应用基本上不需要修正。
    2. 提高程序的可维护性
      三层C/S结构中,应用的各层可以并行开发,各层也可以选择各自最适合的开发语言。
    3. 利于变更和维护应用技术规范
      因为是按层分割功能,所以各个程序的处理逻辑变得十分简单。
    4. 进行严密的安全管理
      越关键的应用,用户的识别和存取权限设定愈重要。在三层C/S结构中,识别用户的机构是按层来构筑的,对应用和数据的存取权限也可以按层进行设定。例如,即使外部的入侵者突破了表示层的安全防线,若在功能层中备有另外的安全机构,系统也可以阻止入侵者进入其他部分。
        此外,系统管理简单,可支持异种数据库,有很高的可用性。
    四、三层C/S应用的开发  三层C/S应用的开发必须遵从以下原则:保护已有投资;降低应用系统的风险; 满足当前的迫切需要;考虑未来的发展规划。
      开发出的三层C/S应用系统必须是:功能丰富且具有高可用性;功能要能跨应用系统;系统要能跨平台运行。
      美国BEA系统有限公司产品计划和战略副总裁Jeri Edwards女士,按下述三种三层C/S应用系统的典型开发类型,分别举例介绍了他们的开发目标、开发过程、开发成果及经验体会。新建应用系统类型(Greenfield),如英国劳工局的劳动力市场系统;提升已有系统性能类型(Turbocharger),如Apple公司的AppleOrder Global系统;综合集成已有系统类型(Integrator),如AT&T的Zenith应用系统。Jeri Edwards女士根据三层C/S应用系统的开发经验和教训,总结出了实现C/S应用系统的"黄金10原则" :
      (1) 尽量简化项目,使项目易于管理。应尽快建起一个初始系统,并尽早投入运行。当项目规模较大时,可以将其分割成由更小开发组担负的子项目。
      (2) 要把精力花在设计上。首先要彻底弄清"需求" ,然后建立一个原型,以便测试设计中的"薄弱"环节。后来增加的特性或部件要保证与系统结构兼容。
      (3) 要奉行"拿来主义"。近来,可供选购的市售C/S产品很多,要坚持"能买就买,为我所用"的原则。必要时,买来后可对系统加以修改,其中既包括基础部件也包括应用。
      (4) 严格遵守业界标准。
      (5) 采用TP监控器或对象事务处理管理器 (Object Transaction Manager ,OTM)。
      (6) 要循序渐进。及时得到用户的反馈;保证项目各部分的良好衔接;及早解决接口问题,以保证项目进展协调;坚持"边分析,边设计;边编码,边测试"的原则。
      (7) 在应用开发过程中,不可忽视系统管理。
      (8) 反复测试,包括用户信任测试、基准测试、系统测试、性能测试、系统集成测试、坚固性测试、服务交付测试等。
      (9) 制定合理的工程进度。
      (10) 制定完善的系统拓展计划,包括用户的培训和技术支持、高效的硬软件装载、已有数据和系统的平滑迁移。
    五、三层C/S应用中的核心  每个C/S环境,从最小的LAN环境到超级网络环境,都使用某种形式的中间件。实际上,无论客户机何时给服务器发送请求,也无论它何时应用存取数据库文件,都有某种形式的中间件传递C/S链路,用以消除通信协议、数据库查询语言、应用逻辑与操作系统之间潜在的不兼容问题。中间件是C/S环境中最重要的部件。所谓中间件是一个用API定义的软件层,是具有强大通信能力和良好可扩展性的分布式软件管理框架。它的功能是在客户机和服务器或者服务器和服务器之间传送高级通信,将客户机群和服务器群有机地"粘合"起来。其工作流程是:在客户机里的应用程序需要驻留网络上某个服务器的数据或服务时,搜索此数据的C/S应用程序需访问中间件系统,该系统将查找数据源或服务,并在发送应用程序请求后重新打包响应,将其传送回应用程序。
      TP监控器在中间件技术中扮演着越来越重要的角色,特别是在三层C/S系统中。据Standish Group的调查,TP监控器是近两年信息业界最热门的技术之一。1996年有57%的关键应用是构筑在TP监控器上的。TP监控器擅长提供事务性语义,允许就环境速度和可靠性进行编程。作为一种中间件,TP监控器提供一种用于编写分布式应用程序的API,它通常包含一组强大的管理工具。TP监控器是一个高性能、高并行性、多用户的快速响应软件运行环境,它能有效地管理大量的并发任务,进而提高系统资源的利用率。如果采用TP监控器,系统总投资可节约30%以上,开发周期可缩短40%~50%。大多数投入应用的三层应用系统都配备有一套事务处理监控系统,BEA TUXEDO是目前应用最广泛的事务处理监控系统。
      BEA TUXEDO是用于分布计算的中间件基础结构,它使开放式应用系统具有高可缩放性、高灵活性和高可维护性。它不仅具有分布式交易处理和应用间报文通信的功能,而且具有一系列极其完善的服务,可帮助企业建立和运行应用系统,使开发人员能够建立跨越多个平台、数据库和操作系统的应用程序。这样,可以灵活选配操作平台以充分适应应用环境。它具有以下特点:  1、支持多种软硬件平台。完全符合Open Group的X/Open标准,支持TCP/IP协议,支持包括Unix、Windows NT、AS/400和大型机专用系统在内的70多个硬件平台和操作系统。
      2、结构开放、灵活。模块结构以高级程序接口ATMI(Application-to-Transaction Manager Interface)为中心,有丰富的ATMI函数可供调用。
      3、开放的联机事务处理。可提供诸如事务性语义、透明的二段式提交、事务记录及分布事务处理管理结构等功能。
      4、与DCE的结合。通过一套工具和程序库,实现了与Open Group组织的分布计算环境DCE的有机结合。
      5、功能丰富,包括:应用管理;事件代理;通过鉴别服务、授权服务和数据加密服务,为客户提供安全保证;对COBOL语言的支持;应用动态调节、负载平衡等保证高可靠性的功能等。
    六、三层C/S结构的应用现状  目前,用三层C/S结构开发的应用还不太多,但其数量的确在逐日增加。图3显示了北美运行的应用开发形态。三层C/S型应用的比例1995年占5%,1997年增加到7.8%,预计到1999年将占22.9%。二层C/S型应用和在原有系统上附加GUI型的
      

  3.   

    我希望是有高手教我怎么做。
      我们一个组给客户开发两个程序,一个是普通的GUI,称为A; 一个是在WEB上的,称为B。两者都要与一个外部进行通讯。我的意思是通讯部分独立为一个应用程序,称为C。
       在C中,实现与外部的通讯。并且最好有一个监视界面, 可以监视系统的运行状态(如是否在通讯,结果如何等)。
       在DELPHI中,可以用MIDAS技术做,而在A,B中用DCOMCONNECT进行联接。
    在VC++中,如何做我就不知道了。
      另外,在A,B 中都有多线程,在C中有没有要特别要注意的?
      STKMAN  的意思,说我好象没有入门,就算没有入门,是不是一定要被你嘲笑呢?谁都是从不会到会的。
      WADE_VC 说的好象三层结构是指数据库方面,但我的情况显然不是。
      请高手们指教! 
      

  4.   

    zhangxhsj(泡泡龙)是对的!我的理解是这样:
    1、你所说的GUI(A)和WEB(B)应该都是属于表示层上的东西,他们为最终用户提供好的界面
    2、在表示层下面的,是COM组成的应用逻辑层,它负责封装应用,表示层的代码通过调用COM完成自身的功能,表示层代码的优劣与应用逻辑层的结构有很大关系,所以这一层一定要好好规划
    3、你所说的与外部通讯的部分(C),应当是属于COM层的
    4、在你的应用中没有出现第三层——即通常意义上的后台数据库层,而三层结构的一个很大的优势就是体现在它通过添加中间层,从而实现对后台数据和表示层代码的分离
    5、你在前面提到的监视器界面,应该放在哪一层上可以根据需要来定。关键是要在第二层上放置专门管理传输状态的模块,以便为界面代码所调用。如果前面这些碰巧是你所需要的,那就学学怎样写COM吧。至于线程——烫手的山芋,原理上应该什么地方都一样,处理好临界区什么的就行了。
      

  5.   

    是不是应该用DCOM来做?
    做DCOM 和做COM有什么区别?
      

  6.   

    区别:DCOM是分布式的,COM是本地的。对于web方式,可以用典型的asp+com来做,不需要用DCOM。对于GUI,也是一个客户端,SOCKET就解决问题了。