我们公司开发了一套管理软件,采用D7开发,使用三层结构,在软件开发过程中遇到了一些很奇怪的问题,具体描述如下:
1、我们做到的应用程序服务器可以支持三台计算机进行分布式处理,但是奇怪的是,如果将应用程序程序器有二台时,将SimpleObjBroker中有两项设为同一台机器,程序不能运行,如果是三台计算机或是将SimpleObjBroker的三台机器全设为同一个计算机名,则运行正常。
2、如果将应用程序服务器与数据库服务器分别放在两台不同的计算机上时,程序不能运行
3、将应用程序服务器与数据库服务器配置在同一台计算机上(系统为2K SERVER,没有做成域),将应用程序做为COM组件,安装到服务器后,然后从服务器中导出代理,供其它的客户端安装,这时有一个很怪的现象,如果客户端为win98 或是2k pro时,程序运行正常,但如果客户端为2k server或是xp时,程序运行没有反应,但是可以看到服务器上的内存使用疯涨,dllhost.dll占用到了300M多,SQL SERVER用了200M多,而且基本上每一秒钟内存都会上涨1M,当然,如果在server上添加这两种客户端的用户帐号的话,则程序运行也很正常,也就是说,COM存在一个用户对应的问题,不知道这个问题怎么解决,不然的话,很麻烦的,当客户执行程序时,我们得要求客户很小心的注意帐号对应,不然客户端程序没有反应,服务器一会也就死掉了。

解决方案 »

  1.   

    1、没看明白
    2、客户端不能运行还是服务器不能运行
    3、建议改用socket连接
      

  2.   

    1用的是SimpleObjBroker,3却用的是COM+组件服务,
    系统整体架构到底是怎么弄的?
    2,连接数据库的问题,重点检查数据库连接及登录部分。
      

  3.   

    作成com?建议你直接运行在com+环境下得了你虽然说了一大堆,说实话我还是没有太看明白,要导出代理吗?
      

  4.   

    算了,只谈第三个问题吧,前两个就不管了服务器端与客户端是通过COM组件来连接的,在客户端运行客户端程序时,如果不安装通过服务器上导出的COM组件代理,则程序不能运行。在win98和win2000 pro平台下,安装代理后,客户端的程序运行正常,一切都没有问题,但是如果将win2000 server或xp做为客户端平台的话,刚必须在做为服务器端的机器上将这个客户端的帐号添加进去,否则出现的情况是客户端的程序不能运行,处于等待状态(因为一添加完帐号后,程序界面就出来了),面服务器端的内存基本上是一秒钟涨1M,几分钟后服务器就玩完了。
      

  5.   

    程序结构如下图客户端1 \      (最多三台应用程序服务器) 
    客户端2 \\     { 应用程序服务器1 }(将应用程序服务器做成COM) 
    客户端3   ---> { 应用程序服务器2 }<------------------------->数据库服务器
    客户端4 //     { 应用程序服务器3 }
    客户端5/
      

  6.   

    >>win2000 server或xp做为客户端平台的话,
    >>刚必须在做为服务器端的机器上
    >>将这个客户端的帐号添加进去,
    >>否则出现的情况是客户端的程序不能运行,...
       这是COM+的安全机制,很正常的啊。。>>处于等待状态(因为一添加完帐号后,程序界面就出来了),
        嗯?处于等待状态?
    >>面服务器端的内存基本上是一秒钟涨1M,
    >>几分钟后服务器就玩完了。
    我也用win2000 server作客户端,如果服务器没有添加客户端账户一般通常
    只是抛出个异常而已..更不会有服务器内存添加...
    你的情况真是古怪,应该跟你的组件编写无关..
      

  7.   

    to  halfdream(哈欠):
    我已经在组件中把安全设置为
    调用的身份验证级:无
    模拟级:匿名
    难道这样还不行吗?而且没有添加帐号时,客户端程序的确是处于等待状态,因为一添加完帐号后,程序界面就出来了,如果始终不添加,就始终不出界面,也不报错,服务器就是那干涨内存,连P也不放一个(我不知道怎么让服务器拒绝这个连接,并且怎么在客户端抛出异常)如果你是说和我的组件无关的话,是不是在导出代理时有什么要注意的呢?我们在这个程序中的做法基本上就是参照李维的书上的那些做法(可能是画猫不成吧)。
      

  8.   

    越奇怪的问题越需要冷静,一步步找问题在哪儿。
    这样吧,先做个最简单的组件调用测试。
    编三种组件,
    1,只支持IUNKNOWN接口 (纯COM)
    2,只支持到IDISPATCH接口 (自动化对象)
    3,支持IAppServer    (DELPHI远程数据模块)
    功能只需实现返回一个‘HELLO WORLD’之类的
    编一个简单客户端,调用也分几种方法,
    1,引入类型库,CoXXXX.Create方式
    2,引入类型库,CoXXXX.CreateRemoate方式
    3,还有其它方式。。暂不建议用。