本人一直是做C/S架构开数据库程序,现在想重新规划一套系统用三层架构来做,可是有以下几个问题一直无法想明白系统有多个系统模块(业务,生管,成仓等),C/S是每人负责一个子模块的开发(编译成EXE文件),可是利用三层结构开发
时就会有问题,每一个子模块都会对应一个应用程序服务器(EXE或DLL),我想用EXE。问题1:是否在服务器上面要执行多个应用程序服务器,如果不是那应该怎么做
问题3:在一个应用程序服务器上面是否可以建多个RemoteDataModule远程模块(那么这样儿的话也就相当于是多个服务了)
问题2:如果要更新应用程序服务器就必需停止服务,然后再更新再启动服务,这个更新的问题又如何解决

解决方案 »

  1.   

    可以使用WebService之类的处理.
      

  2.   

    如果是自己订制的协议的话,可以做成只需要一个服务器应用程序,其它功能全部做成DLL.在高版本的操作系统当中允许对使用中的DLL进行重命名,从而你可以在需要更新DLL的时候把原先Load进程序的DLL用一种灵活的管理机制,与现用的隔离开来,从而新来的业务处理,则可以使用新Load进来的DLL.在这个对DLL的管理当中,增加引用计数,当老的DLL的引用计数为0时,就可以把它从程序当中卸载出去.
      

  3.   

    Unsigned 讲的实现起来太复杂了,恐怕要研究比较久,
    Corn1的做法,那跟两层的就没什么分别了。
      

  4.   

    僵哥说得有理.不过我都是将每次的升级文件放在一个新的目录,再将新的DLL文件(COM组件)注册;这样,在我新注册COM之前就连接服务器的客户端,使用的仍然是旧的服务程序,而在注册之后才连接的客户端使用的是新服务;但这也有版本不一致问题,因此,如果服务器程序是作了重大调整而且要立即生效,那只有关掉服务器程序断开所有客户端连接再注册新的DLL文件.
      

  5.   

    建议使用WEB SERVICE,其技术到今天已经很成熟了.你所说的问题都不会存在了!
    COM技术某些地方太复杂,资料有限,系统复杂后有时出错甚至不知从何找起.
    要提醒的是要想你的WEB SERVICE服务端程序运行在WS2003或VISTA版上,需要用D2007,或D2009来写服务器端.
      

  6.   

    web service虽然方便,但是效率不高.
      

  7.   

    技术小结:
      一、根据不同连接方式进行不同的应用
      1.DCOM  建议局域网当然在INTERNET网也可以只是防火墙要设置好
        使用DCOM+POOLING+RemoteDataModule就可以实现,其会自动根据RemoteDataModule被占用与使用情况创建与释放RemoteDataModule(即已创建的模块都在使用时,会自动创建新的数据模块),15个连接池(个数可以修改)足可带上300个用户.
      2.SOCKETCONNECTION 用于INTERNET网比较合理
        使用SOCKETCONNECTION+RemoteDataModule+完全端口+数据压宿,效率也非常高。而这种方式是连接一个工作站会创建一个RemoteDataModule,退出时自动释放(SConnect.pas中要进行一定的修改,不然会不知什么时候就DOWN了)。如: 
      V:= ReadVariant(VarFlags, Data);   //modi 否则服务会异常退出,在ReadVariant后要对V进行校验。
      If VarIsEmpty(V) then  //add 进行校
      begin
        raise Exception.CreateRes(@SInvalidDataPacket);
        Exit;
      end;
     二、可以使用RemoteObject实现真正的三层,客户端小,不过应用层比较复杂,若不赶工时的话建议用,以后维护量较小,且特别在查询统计方面口径会统一。
      

  8.   

    问题1:不用
    问题3:可以
    问题2:思路 -- 加个升级程序,其负责检测是否有需要更新,有时先下载为一个定好的临时文件,Kill主程序,更新新程序,再运行主程序,退出升级程序。
    我目前是以DCOM  + SOCKETCONNECTION 合并为一个应用服务器,编译为.EXE文件运行。
      

  9.   

    我觉得三层的开发好麻烦,也不知道怎么调试数据库设计时有AutoIncrease字段,老是不能Insert成功
    http://topic.csdn.net/u/20080529/13/0a23bef9-9117-4a4b-8f40-63e9991b04ad.html
      

  10.   

    你也没有说用什么语言工具的,如果用.NET,VS2005开发
    系统有多个系统模块(业务,生管,成仓等)指的是不动部门用不同的子系统还是只是单纯的模块了,如果是不同的系统,同样可以由不同的人员负责开发,应用服务器起三个不同的网站(web service),数据库可以调用同一个,方便各系统的数据共享调用.
    .NET省却了很多底层的东西不用去考虑,优越性就不用我在这里做广告了.
    至于更新程序方面,不会影响要业务的正常运作,可以不间断业务直接更新系统.
      

  11.   

    看看WCF.满足你的所有要求。
    WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。
    用过了,效率可以接受。
      

  12.   

    几天没来了。。这么多消息啊。我已经想到办法解决我的问题了。还是非常感谢大家的,对于WEB Service 没看过所以不敢用了,.net想用自已试过,感觉特别不好控制,速度奇慢。