★★★DCOM服务器的CallBack的技术怎样实现?★★★ (100分)

  • 主题发起人 主题发起人 baohongyu
  • 开始时间 开始时间
B

baohongyu

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一组DCOM的程序.SERVER+CLIENT.
可是当 Clinet调用Server的一个函数后,我想Server有一反向调用点.就是CallBack
不知道在Dcom里怎么实现??
高手指教?
 
Callback(回调机制)——即 IPC 机制,实现函数呼叫。
client対server的調用,是通过client端 COM stub来进行的;
server対client的回应,是通过server端 COM stub来进行的。
具体使用代码可以看Delphi帮助。

 
To:YB_unique
问题1:Delphi里我没有找到它的例子.不知道大侠有没有?
问题2:Delphi里没有找到相关的您说的解释(可能是我没找到),不知大侠可否给上QQ.
 
没回答???
 
呵呵.
听说大富翁是Delphi高手云集的地方,可是我提了个问题还没CSDN上回答的多.
是我提问的不够明白,还是各位大侠看我提的问题太菜,不愿回答.
这儿的质量越来越差啦.
算啦.我还是回我的CSDN上吧.
 
要想Server发送消息给指定的Client,你需要设置一个全局的用
户列表,每个用户
在创建了CoClass之后, 应该通过一个RegUser
method注册用户的名称到你的列
表之中同时注册用户CoClass的指针(如果是multithread),
要发送消息的时候找
到这个用户的CoClass激发相应的事件.
注意,在destroy的时候从用户列表中去掉
注册的用户.

具体做法 可以在Com Object的单元中声明一个TStringList,并且
在单元的
initialization创建 在finalization时候free.

type
TMyComObject = class(TAutoObject, iConnectionPointContainer, iMyObject)
private
...
FUserName: widestring;
protected
...
procedure RegUser(UserName: widestring);
public
destructor destroy;
override;
end;

var
UserList: TList;

implementation

....
procedure TMyObject.Login(const UserName: WideString);
begin
FUserName := UserName;
UserList.Add(UserName,self);
end;

initialization
TAutoObjectFactory.Create(ComServer, YourObject, Class_ofYourObject,
ciMultiInstance, tmApartment);

//create userlist
UserList := TStringList.Create;

finalization
UserList.Free;
end.
想要全部代码的到这里http://www.techvanguards.com/
 
看看Socketsvr吧,那可是标准的例子.
 
应当是使用可连接对象吧
 
http://delphi.mychangshu.com/dispdoc.asp?id=199
it can implement call back
 
to yyanghhong:
程序出现了“拒绝访问”
 
To:zhfhe
多谢指点,我会给分.只是我还想听听高手们的意见.
 
to yyanghhong:
小弟已经把几乎能设的人和组都加进去了,除了 callback 之外都没有什么问题。我把程序
改成 MTS方式也出现同样的问题。BTW,我用的服务器是 NT 4,客户端是 2000 个人版。
今天就要交功课了,怎一个惨字了得!
 
if show such kind of error message, that is the windows authorization problem,
that means you didn't set the dcom configuration right.
 
to yyanghhong:
奇怪的是。无论是用 http://www.techvanguards.com/介绍的方式还是用您的做法,
在 2000(group)对2000(domain) 的环境下什么问题都没有,
呜呼,我已经两天没有合过眼了,满地烟头,
总不能叫客户把那 200多台客户端装成2000吧。
 
to yyanghhong:
客户端我没有做任何设置,仅注册了服务器类型。如果客户端要设置,请问如何设置。
服务器我的设置是
默认验证级别:无
默认访问权限:every one 和 network 都加入了
默认启动权限:every one 和 network 都加入了
默认配置权限:every one 和 network 都加入了
该程序用户:加互式用户
 
check the registry HKEY_LOCAL_MICHINE/SOFTWARE/MICROSOFT/OLE of server and client side,
see what is different.
client side also need todo
dcom configuration because youdo
callback.
 
how about both of server and client sides are located in same platform?
have you set the dcom configuration both of server and client sides?
I think you only set the authorization of the server side, the server side must
have authorization to access the client side.
 
to yyanghhong:
在HKEY_LOCAL_MICHINE/SOFTWARE/MICROSOFT/OLE 中除了 enabledcom 和enabledcomhttp
之外其他的项目都有所不同,请问其他的项目都要跟服务器一致吗?
 
后退
顶部