我的服务器有两个组件,一个是数据模块,一个是业务规则模块,我想用SOCKETCONNECTION的方试调用业务规则模块上的功能,怎么用,(注,我不想把那些方法写在数据模块那个DLL内).......想请教高手

解决方案 »

  1.   

    sockectconnection是用来联接数据模块,你要用使用DataSetProvider,或者其它的,来实现业务层接口的调用,这样听得明白吗?
      

  2.   

    TO  ruoqi2003(青春网星) ,你可能理解错我意思了,你说的那个DataSetProvider,我的理解只能连接DATASET,我是说我的客户端怎么去用那个业务组件中的方法啊,(你的datasetprovider用在客户端的吗?)
      

  3.   

    是这样么?两个模块在同台pc,而另台pc要调用其中一模块么?
      

  4.   

    TO whbo(王红波) 对,那两个组件在我的应用服务器上,我要在我的客户端搞用我的业务组件(dll)中的方法,我用DCOM的方式我能用,但用SOCKET的方式我除了能用应用服务器上的数据模块组件外,好像不能用组件...各高手,能提示一下吗?
      

  5.   

    不太明白,不过SOCKETCONNECTION是用来连接数据库,能把其他得都连上吗?函数,方法,过程行吗
      

  6.   

    to huanghai12(吉翔鸟) 比如说,应用服务器上有数据模块组件,还有一些组件是查询等方法,我不想把那些查询方法写到数据模块内调用,如果那样的话,客户端是很容易调用的,(我不想放在一个组件内是因为我的项目以后要集成WINDOWS2K的用户权限,如果什么东西都写在一个DLL内,好橡不符合对像分类的原则吧..............)
      

  7.   

    除了使用DCOM,好像不能解决该问题,不过如果你这个数据模块和业务对象存在很多联系,可以试着在数据集的各种操作中执行业务,一般来说,业务部分还是放在客户端处理要灵活,只要不是太耗服务器资源
      

  8.   

    to  shinesir() 你说的有些道理,数据组件和业务组件是存在很多联系,看来我只能这样做了,在数据组件上写方法调用业务组件中的方法,不过这样在服务端内存很难控制(包括建立和释放),再用SOCKET的方式去调用数据组件中的方法,,,唉,各高手,难道只有这方法了吗?
      

  9.   

    to  shinesir() 把业务组件的方法写在客户端是行不通的,(不是说不能这样用),最少我这里不能这样,因为我的组件很多程序要用的啊,不只是我的程序啊,你写在客户端的话,我的那么哥们不会把我骂死!!!用DCOM的调用方法没问题,但很难过防火墙,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
      

  10.   

    给个例子你看看有没有用吧?
    定义方法的数据操作
    procedure Ttestapp.mm(UserName,PassWord);
    begin
     ADODataSet1.Close;
     ADODataSet1.CommandText:='select Legal_power from UserManage where UserName='''+UserName+''' and PassWord='''+PassWord+'''';
     ADODataSet1.Open;
    end;客户端调用:procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
    UserName:=edit1.text;
    PassWord:=edit2.text;
    DataModule2.APPS.mm(UserName,PassWord);
    ClientDataSet1.close;
    DataModule2.ClientDataSet1.Open;
    //剩下的就是你对返回数据集的处理了
    end;
      

  11.   

    to zdq801104(我很笨,但是我不傻!),对,我要用服务器上的接口,我看了你的代码你那是调用数据模块组件上的方法吧(DataModule2.APPS.mm(UserName,PassWord),我不想写在数据模块组件上,我想写在其它组件上,那样的话,客户端怎样搞用服务器上的接口呢?
      

  12.   


    这个(DataModule2.APPS.mm(UserName,PassWord),调用远程数据模块的函数,并不是在客户端的数据模块的
      

  13.   

    you should define your private protocol to implement your idea.
    DCOM is a such example.
      

  14.   

    TO zdq801104(我很笨,但是我不傻!) 我知道你是调用应用服务器上的数据组件中的方法,但你可能理解错我的意思了,我是要调用应用服务器中除数据组件中的方法啊,比如业务组件啊............................................
    to aiirii(ari-爱的眼睛)  也就是说我有两个组件,一个是数据模块组件,一个是业务组件,以前用DCOM的方式调用业务组件上的功能的,这样没问题,但那个DCOM很难过防火墙,我改用SOCKETCONNECTION了,这样是可以过墙,但我辛辛苦苦写的组件不能调用了(除了数据模块组件SOCKETCONNECT能调用外)...........
      

  15.   

    TO zdq801104(我很笨,但是我不傻!),你理解到我的意思了吗?如果理解到我,我马上给你100分
      

  16.   

    TO zdq801104(我很笨,但是我不傻!),我马上给你100分,你传到来看看你的例子
      

  17.   

    to zdq801104(我很笨,但是我不傻!) ,有两台电脑,一台是服务器(安装了我很多个组件,每个组件都有不同的功能,如,有的是组件是调用该组件的方法就以数据包的行式返回到客户端,有的组件是用来登录的,)如用DCOM的方式我可以这样写
    procedure TForm1.Button2Click(Sender: TObject);
    var
      qCoor : ImtsDemoQueryCoor;
      vDatas : OleVariant;
    begin
      qCoor := ComtsDemoQueryCoor.Create;
      qCoor.GetBooks(vDatas);
      ClientDataSet2.Data := vDatas;
    end;
    但这样写的程序在发存的时候要注册服务端的接口注册!!!最要命的是,不能过防火墙啊....我就不再多说了,你说说,我不想用这种方法,又不想注册什么服务端接口,有什么方法,(我看到用SOCKETCONNECT的东东连接服务器的DataSetProvider,很好使,而且客户端又不要注册什么,唉,但它不能用到我写的接口啊,如上面的ImtsDemoQueryCoor),,苦...........................
      

  18.   

    我有空时也上上CSDN回答一下别人的问题,第一次发存问题,没想到自己有问题也有很多人捧场,,谢谢各位!!!
      

  19.   

    说白了你还是要在客户端调用服务器上的某个组件的方法,只不过你是不想把远程方法定义成远程数据模块的方法,而是想定义成其它所谓业务对象的方法。一句话你想进行远程过程调用。
    但DELPHI提供了好几种远程过程调用的方式:1:套接字连接(TSocketConnection)、2:DCOM连接(TDCOMConnetion)、3:HTTP连接(TWebConnection)、4:SOAP连接(TSOAPConnection)、5:CORBA连接(TCORBAConnection)。以上每种后的控件名是DELPHI提供的默认连接控件,要使用它们就得在服务器上建立不同的数据模块,然后在客户端用相应的连接控件连接就可调用服务器上数据模块的方法。如你所说:这些方法都是远程数据模块的方法。但所谓远程数据模块只不过是一些特殊的类你可以对比研究一下它与普通类的区别(1、继承:TRemoteDataModel;2、实现一个以"_TLB"结尾的单元中的一个接口;3、有UpdateRegistry类过程 ;4、在单元的initiallization部分的TCommponetFactiory.Create过程),然后把你的类改成这个样子应该就可以了。
      

  20.   

    TO  ybb575(ybb) 看来我只能这样做了,在数据组件上写方法调用业务组件中的方法,不过这样在服务端内存很难控制(包括建立和释放),再用SOCKET的方式去调用数据组件中的方法,,,