从原理和使用程度上看,微软没有必要,也的确没有要废弃RPC/DCOM的迹象,但是显然这些技术会长期退入幕后当作基础设施了。
他们都是跨进程间的通信的(跨机器自然也算是也),无非就是寻找接口,数据序列化反序列化,但他们的确是最高效的。
广为人知的point:
-
RPC是基础。DCOM可以看成RPC的C++版。
-
RPC/DCOM在本机使用时主要是依靠LPC Port(而他又使用共享内存,queue等东西)。用WinObj工具能够看到各种ALPC类型的东西,其中就有很多是RPC/DCOM生成的。
-
这类东西,别的系统里也有,例如Android里的Binder,非常类似于DCOM,只不过仅限于本机而已。而Mac OS X里也有XPC Service,NSProxy/NSConnection之类的。
不够广为人知的point:
-
RPC可以通过文件共享协议(SMB)来调用,也就是TCP端口445。这是SMB协议为RPC开的一个扩展。这时,RPC的认证也就委托给SMB了,这其实很方便实用。
-
RPC在本机的使用非常频繁,但在跨机器间的使用较少,几乎只限于微软做的服务(例如计算机管理,远程注册表...)。
-
通过注册表把普通组件升级成DCOM组件的使用方式实际存在很多。
-
在跨机器场景里,DCOM和RPC的认证方式,通信端口不一样。RPC/DCOM本身的认证方式不方便。
-
每次看到DllHost.exe启动了,就说明有DCOM组件被启动了,而且是Dll组件升级的那种。
本机内RPC/DCOM使用例
-
各种服务通过原始RPC提供基本控制接口,就是sc命令那套。还有很多系统服务提供额外接口,例如Registry,Netlogon,Firewall,Service Control,SQL Server... ,具体RPC接口信息可以在msdn里有(检索rpc找到相应的服务,然后可以概括看看idl,例如