MTS/COM+问题:Client用CreateRemote呼叫时发生Interface not Supported错误, why???急!!!再加500 (1

  • 主题发起人 主题发起人 wen
  • 开始时间 开始时间
W

wen

Unregistered / Unconfirmed
GUEST, unregistred user!
MTS/COM+问题:Client用CreateRemote呼叫时发生Interface not Supported错误, why???急!!!再加500 (100分)<br />问题描述:
1 同一server中,CoMTS.CreateRemote('servername') 及CoMTS.Create结果都正常.
2 通过client 呼叫server端的mts/com+组件时发生:"Interface not Supported"错误!
好久都没找到原因,那位能告诉我???
解决问题即加分!!!
 
需要把COM+的TLB包含到你的单元,然后你就可以试试看可以不。
看看我以前的帖子 地址如下:
http://youxing.99friend.
net/news/shownews.php4?newsid=18
 
把服务器端拿到客户端运行一遍,让它注册一下。
 
ohyee:
在d6中是指CmAdmCtl,原已经uses了,你的贴子看了,有点帮助,但问题没有解决!
hbezwwl:
没理由的,原来都是在client编写,测试好再移ap到server的.
 
各位都沒碰到這個問題嗎?
李維的書也只說:
var
Itest:IMTS;
Itest:=CoMTS.CreateRemote('apserver');
Itest.getPartData ..就可以,但我這里就是不行,好像是
CreateRemoteComObject(..)返回IUnknown類型接口轉目標類型(IMTS)時出錯.
 
试一下这个:
你的APP服务器->管理工具->Component Service->你的Application
->Export(选择Application Proxy)->生成的包安装到你的Client
 
Hongjiang:
試了不行,因為要的是遠程訪問而不本地訪問,
那位給我一個完整的例子,難道我的com+寫法有問題???
否則沒理由的.
急死我了!
 
组件服务中,MTS有没有装好
 
不是,应该是权限设置没有配好
 
把你Client端的appserver com组件unregister,安装从appserver中export出来
的proxy,注意,export时要选择application proxy,而不是server application
客户端代码中不要用CreateRemote,用普通的Create。
 
Hongjiang:
我明白您的意思,难道所有客户端都要装一个proxy吗?(mts/com+之类的书是这样说过).
目前我的系统目标是,web(asp,activex+com+/mts+db),我要的就是客户端不要安装.[:(]
MTS可以不要在客户端再安装proxy的,我们有这样的系统,server在大陆,
hk只要安装几个dll就可以了(系统是买的),不是客户端安装proxy.

 
我想你对我说的客户端理解错了。如果你的web服务器和你的应用服务器是在
不同的机器上的话,你的web服务器中asp调用appserver组件,那么你的asp
就是客户端,而不是指访问你的web服务器的用户(browser)。COM中最基本的
概念之一就是proxy/stub,也就是marshaling。所以你说的‘MTS可以不要在
客户端再安装proxy’的说法我不知道你是从哪儿听来的。根据你说的‘hk只
要安装几个dll就可以了’,那么这几个dll中就有proxy。我想你最好去读些
有关COM的书
 
Hongjiang:
多谢你的意见,我会多参考一下这方面的书籍.你至少可以拿200大洋了(会另开专题).
再补充说明几点:
1 开发环境是三台:DB Server:sql server7.0
AP Server:win2000作web服务器+组件服务器(activex访问组件是create方式)
Client:我的工作台,未装组件.
2 A:先activex 放在ap上,client上去browse ap上的activex,此时的提示是:组件未登录.
B:再在client上装proxy,再执行是:'Interface not Supported'
C:在AP上浏览activex,正常.
3 我们买的那个系统,运行方式是activex+mts,client上有安装dll,但在client的组件服务器中找不新增的组件代理,
另外可说明的是:做二次开发时,新增的mts组件,只需在ap上安装.client无需做任何变动.
请问大侠的问题是:
1 远程执行activex的client端是否要装proxy?或者有另的访问方式?
2 如何解决这个问题?
 
我想可能您描述的层次没理清楚
还是您说的ACTIVEX又是什么???
MS SQL-->MTS/COM+-->MIDAS/DCOM-->Client
MTS/COM+为ActiveXLibrary,注册在服务器《组件服务》中,分发可选择“应用程序代理”(下边那个)
如果是MIDAS,CLIENT要发布MIDAS。DLL
如果是原生DCOM,参考http://jp.njuct.edu.cn/crystal/uploadtools/members/DELPHI6DCOM.mht
 
activex 是我習慣稱呼,大家都熟悉的,activex form+html,
一定要midas嗎?!
 
wen,你的浏览activex是什么意思?根据你的以上描述,有以下的情况:
1,client只是访问web服务,并且没有在web页面中用到activex组件,
那么你的client不用装proxy,而且因为你的web服务器和ap服务器在同
一个服务器上,你的web服务器也不用装proxy,这种情况下可能你的组
件没有装好,比如有什么要用到的dll没有等。你可以看一下你的组件是
不是用到了stdvcl.dll,midas.dll等。
2,client访问web服务,在web页面中用到activex组件去访问ap服务器上
的mts组件的话,那么你的客户端是要proxy的。而且根据情况还要用到其
他的dll,比如stdvcl.dll等。
至于你们买的那个系统,在client的组件服务器中找不新增的组件代理是
因为它并不是注册到COM+ Catalog中的。你可以比较一下,通过regsvr32
注册的ActiveX在Component Service里是看不到的。
做二次开发时,新增的mts组件,只需在ap上安装.client无需做任何变动.这
是和他们的设计有关的。一句话,你如果在client端的代码中有create你的
COM组件,那么几乎在所有情况下都会用到你的COM组件的proxy。
 
問題解決了,但不合我意,另開一關於com+ proxy的專題.請Hongjiang等來取大洋.
( MTS/COM+问题: 如何避免远程客户端安装/升级MTS/COM+的代理,有没有解决方案?)
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1033091
 
多谢各位,但问题依然没解决!
在server端,在create中加入showmessage('aa');能执行.
在client端返回Iunknown接口可以,如下测试:
class function CoMTSTest.CreateRemote(const MachineName: string): IMTSTest;
var aa:IUnknown;
begin
aa:=CreateRemoteComObject(MachineName, CLASS_MTSTest);
//执行成功
result:=aa as IMTSTest;//类型转换出错:'Interface not Supported'
//如果用result:=IMTSTest(aa);又没问题,但执行方法时为空.为什么???
end;
Konzi:
在权限方面,设不设都是一样的错误提示,在本地不设权限时是'存取拒绝'的错误提示.
=====================================
我在想是不是RPC方面出问题,为什幺返回的接口不能转换呢?
那位能给个简单而完整的COM+/MTS例子给我使使(说明:D6的DEMO也不行),
我想测试一下环境是否有问题,但无法下手!
那位大侠能帮忙分析原因!解决问题我请客或500大洋.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
469
import
I
I
回复
0
查看
948
import
I
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部