假设有COM+服务器A,客户端机器B。在A上的COM+应用提供两个接口IA和IB,因为IB的实现要用到IA,IB有一个方法要求将IA作为输入参数。
客户端进程先获得了IA,然后获得IB。这时客户端拥有的IA和IB指针实际上都是本地的proxy,而客户端调用IB的方法将IA转给IB,则在服务器端的IB获得的IA是指向B的proxy呢,还是实际指向服务器端自已的IA?换句话说,服务器端的IB内部调IA的方法时,是否会在A和B两个机器间出现A-B-A的数据传输?因为IA和IB的实现都在服务器端,我希望是数据传输实际上只发生在A机器内部。更进一步地,如果IA和IB配置在同一个COM+ Context下,则COM+是否能识别IB和由B传来的IA实际上在同一个context下,而避免context包装和切换?
客户端进程先获得了IA,然后获得IB。这时客户端拥有的IA和IB指针实际上都是本地的proxy,而客户端调用IB的方法将IA转给IB,则在服务器端的IB获得的IA是指向B的proxy呢,还是实际指向服务器端自已的IA?换句话说,服务器端的IB内部调IA的方法时,是否会在A和B两个机器间出现A-B-A的数据传输?因为IA和IB的实现都在服务器端,我希望是数据传输实际上只发生在A机器内部。更进一步地,如果IA和IB配置在同一个COM+ Context下,则COM+是否能识别IB和由B传来的IA实际上在同一个context下,而避免context包装和切换?
解决方案 »
- vc6.0 下的程序能不能在win95下运行?
- 能否在一个socket句柄上同时进行收发?
- 有关千千静听的换肤功能实现,求助!!!
- 语法问题
- 求救!!单文档
- CWinapp是主线程包含UI的。再创建子UI线程CWinThread,启用消息循环,子线程死机,主线程也卡死了!??
- 如何::使用VC,通过网络,拨打手机号码?(不要求通话。)。。。。求助高手
- 一段这么简单的代码为什么不能正确执行阿
- 请问如何用SendMessage()函数得到Edit控件中的数据??
- 请教高手: vc++6.0 mfc 编程环境,使用mdi多文档,该看那些入门材料?
- 请问:怎样构造CStringArray 数组?在线等待!
- ADO 问题
{
HRESULT hr;
IStream *pStream = 0;
hr = CreateStream(0, TRUE, &pSteam);
hr = CoMarshalInterface(pStream, riid, &pStream, MSHCTX_DIFFERENTMACHINE, 0,MSHLFLAGS_NORMAL); ULONG size;
hr = CoGetMarshalSizeMax(&size, riid, pObject, MSHCTX_DIFFERENTMACHINE, 0,MSHLFLAGS_NORMAL); HGLOBAL hg;
hr = GetHGlobalFromStream(pStream, &hg);
unsigned *buffer = (unsigned char *)GlobalLock(hg)
}
这段代码里面,可以把一个标准调度后的接口指针放在一个内存块里面,然后你可以随便在哪一个进程,哪一台机器上复制一个一模一样的内存块,然后你调用
IStream *pStream = 0;
hr = CreateStreamOnHGlobal(buffer , TRUE, &pStream);
hr = CoUnmarshalInterface(pStream, riid, pObject);
pStream->Release();
只要原始对象处于运行状态,你这个解调度后的接口指针就会有效。
我不知道是不是真的那么神奇,如果是的话,我想你的问题应该很好解决,如果A机器通过B机器的组件访问了A机器的组件,实际上只是把A机器上的目标组件的调度流拷贝到B,然后再拷贝到A,然后A才根据这个调度流调度目标组件的方法。
IStream *pStream 不是说在那台机器分配一块内存来反调度接口指针,一般作为消息参数或者线程函数的差数传递到需要的到该接口指针的地方去的。其实就是一个跨Thread/Process的调度。在本机会使用Mapping,跨机器使用Socket机制。