我是在自己机子上,用localhost,机子名, IP都可以正常联接到系统。但我在局域网上就联接不了,在别人的机子上也接不上我的机子。就算我把服务器程序和客户端程序装到别人有DELHPI的机子上,那样程序也不能正常运行
不知道问题出在哪里?
如果你有回答,请回复或emai:[email protected]我的DCOM是这样联接的:
1、启动delphi6,新建->application 
2、新建->Remote Date Module 
3、在Remote Date Module 上放置ADOConnection,ADODateSet,DateProvider 
4、设置好ADOConnection(和在本地计算机设置一致)    ADODataSet.Connection = ADOConnection    DataProvider.DataSet = ADODataSet 
5、保存 
6、RUN ONCE 
7、关闭当前项目,重新创建-〉Application
 8、在windows下运行刚才编译的那个程序 
9、在form上放置DCOMConnection,ClientDataSet,DataSource,DBGrid 
10、DCOMConnection的第一个属性值应该是应用服务程序所在的计算机,当前就是你这 台计算机,注意如果你能够确定这台计算机的ip,那么最好填写ip地址 
11、点击ServerName的下拉框,不出意外可以看到你的应用服务程序名称,选择 
12、激活DCOMConnection的connected属性 
13、这时候链接远程服务程序已经成功了。如同本地一样设置ClientDataSet,DataSour ce,DBGrid各自的属性      
 ClientDataSet.ProviderName = DataSetProvider1//这里可以通过下拉框选择       ClientDataSet.RemoteConnection = DCOMConnection1      
 ClientDataSet.Active = True 
注意:创建RemoteDataModule的时候,delphi会提示输入一个类别名称,这个可以自定        
 在创建客户端的时候,务必使应用服务程序处于活动状态     务必将服务器端的DataProvider的Options中的pAllowComdText设置为真,否则不能通过 客户端发送SQL语句

解决方案 »

  1.   

    这是因为你没有控制前端用户的权限,,你必须知道DCOM对象的安全机制是以Window NT的安全模式为构造基础的,就是说前端用户一定要被加入Windows NT的用户群组内,你可以利用DCOM所提供的一个配置工具来规范应用程序服务器的执行权限,这个工具叫DCOMCNFG.EXE,放在WinNT的SYSTEM32目录下,你找到以后就可以在这个工具中设置应用程序服务器的执行权限了,祝好运!
      

  2.   

    这个问题是DCOM的问题;
    还有,你说在别的机子上不行,那么,到了别的机子上的话,第一要改计算机名(DCOM中,用计算机名更多些),第二要注册服务才可以使用;配制DCOM及相关介绍
    四、DCOM配置
      如果在Windows NT环境下正常运行应用服务器,必须进行DCOM配置。配置方法如下:  1. 运行NT服务器上的dcomcnfg程序,进行DCOM配置。
      2. 进入DCOM的总体默认属性页面,将“在这台计算机上启用分布式COM”打上勾,将默认身份级别改为“无”。
      3. 进入DCOM的总体默认安全机制页面,确认默认访问权限和默认启动权限中的默认值无EveryOne,如果不去掉EveryOne,应用服务器不能正常启动。
      4.在常规页面中,双击你的应用服务器,打开你的应用服务器DCOM属性设置。
      5.将常规页面中的身份验证级别改为“无”。
      6.位置页面中选上“在这台计算机上运行应用程序”。
      7.将安全性页面设置中,均选择“使用自定义访问权限”,编辑每一个权限,将EveryOne加入用户列表中。
      8.身份标识页面中,选择“交互式用户”。
      9.NT的GUEST用户不能禁用。  结束语
      多层Client/Server结构的优势:
      1. 客户端只需要关注用户界面,而且与其他客户共享相同的数据访问模块,从而使客户端大大“减肥”。
      2. 客户端与应用服务器端一般分布于不同的计算机上,程序运行效率更高,处理事务的能力更强。
      3. 有利于提高数据的安全性,因为应用逻辑和最终访问数据库均由应用服务器端实现,而不是由多个客户直接访问数据库服务器,减少了网络上的数据流量。1。如果是使用独立的EXE文件,那么必须拷贝所有的EXE档案以及这些档案使用的OCX,DLL到客户端。你可以使用DELPHI内建的INSTALLSHIELD制作安装磁盘。如果是使用ACTIVEFORM,那么就无需安装客户端的应用程序,因为ACTIVEFORM可以自动的下载到客户端。2。在客户端机器中必须安装DCOM。3。拷贝MIDAS。DLL档案到客户端的Windows或是Winnt子目录中。你只需要拷贝这个档案到Windows的系统子目录下即可,当客户端应用程序执行时,它会自动注册这个档案到注册表中服务端的分发和设定在多层应用系统中,分发服务比较复杂。1。决定使用存取控制的权限。如果你有WINDOWS NT做为应用程序服务器的平台,那么建议使用‘用户级存取控制’2。执行应用程序服务器一次以注册应用程序服务器。3。拷贝MIDAS。DLL到系统子目录中。而且必须注册。你可以使用TREGSRV32来注册MIDAS。DLL4。拷贝IDPROV32.DLL到BDE数据库引擎的子目录中。5。使用DCOMCNFG设置应用程序服务器的存取权限。在通常情况下,可以将验证等级设定为‘无’,并且把存取控制和激活控制设置为EVERYONE就可以让所有的客户端用户激活和存取应用程序服务器。6。如果目前使用的DCOM是对于95的话,强烈建议你升级到98,否则程序员必须自行激活RPCSS。EXE至此,分发过程已经结束,如果还有问题,请使用DELPHI5的MODULE VIEWER来观察。当程序员使用DELPHI开发分布式多层应用系统后,除了将应用程序序列分发之外,还必须使用DCOM的配置应用程序DCOMCNFG.EXE来进行设置。在WIN9.X系列中进行DCOM之前,应确认是否装有DCOM,如果没有,可WWW.Microsoft.com下载。WIN9.X配置为DCOM服务器第一步就是将访问控制设置为用户级控制。在‘获取用户及组的列表中’输入该局域网中能提供安全权限的机器名(该计算机必须正在运行)。第二步就是运行位于系统目录下的.exe文件。在应用程序列表中应该能够找到你所编制的应用程序,如果没有列出,请将你所编的程序运行一次。通常,我们可以通过修改默认属性及默认安全性来达到一定的目的,在‘默认属性’页中,让‘启动该计算机的分布式COM’选项选中,而‘默认的身份验证级别’中‘连接’的意思代表‘只在客户端第一次连结应用程序服务器时检查客户端的权限’。‘默认的模拟级别’中‘识别’的意义为‘在这种模式下,服务端可以取得连结的客户端的权限信息,但是服务端无法以连结的客户端的权限存取系统对象’。当其设为‘模拟’时,表明‘服务端可以取得连结的客户端的权限信息,并且能够以连结的客户端的权限存取系统对象’。在默认属性页中,还有一个‘为跟踪引用提供附加的安全性’的选项。这个设置可以让应用程序服务器使用COM/DCOM的回叫机制以保持COM/DCOM中远程调用参考计数值(reference count)的正确性,以避免客户端应用程序恶意的调用应用服务器并且断线。选中这个选项可以让应用程序服务器有效的管理其生命周期,但是也会减缓应用程序服务执行的速度。上述的内容其实在DCOMCNFG的帮助之中都有,我这番解说有些画蛇添足,但我对它配置的建议就是,尽量使用默认值。在NT中的一些配置也极其相似。但要理解以下的概念激活控制:就是指哪些用户可以激活应用程序服务器。当客户端应用程序执行并且试着在远程机器之中激活应用程序服务器时,COM/DCOM的安全机制会检查这个客户端应用程序登录的用户是否有权限中以激活应用程序。存取控制:指当应用程序服务器由适当的用户激活后,哪些用户可以存取应用程序服务器所提供的服务。此外,一个应用程序服务器可以提供数种不同的服务,取存控制能够限定特定的用户进行特定的操作认证控制:是指在数据进行传递时,数据是否加密鉴定控制:是指应用程序服务器的权限。即指在服务器上登陆的用户,他所执行的应用程序服务器所存取的资源是否在他的权限范围之内。
      

  3.   

    相关资料:
    http://www.nxit.net/bbs/list.asp?boardid=9
    http://www.nxit.net/bbs/dispbbs.asp?boardID=9&ID=31
    我把一些配置图也放了上去,如果你有兴趣的话,可以看一看;