远程过程调用

时间:2009-01-15 11:22:25

标签: c++ windows rpc

有没有人知道在windows(非.net)环境中进行远程过程调用的好方法?

我无法找到有关如何操作的信息,msdn只有.net版本。

编辑:

感谢目前为止的答案。我需要它是与同一台计算机上的服务进行通信,该计算机将进度报告发送回“客户端”。我在rpc中感兴趣的原因是因为vistas uac以及服务无法与普通应用程序交谈,除非他们使用rpc或管道。看看管道,它们似乎完全基于文本,我的印象是rpc可以传递强类型值。

我也会研究DCOM。

7 个答案:

答案 0 :(得分:6)

如果您只对同一台计算机上的进程之间进行通话感兴趣,boost::interprocess是获取通道进行通话的一种很酷的方式。

更多特定于Windows的解决方案是shared memory mapped file和系统全局互斥/信号或named pipes

boost::serialize和google protocol buffers是将您在进程之间发送的数据转换为二进制字符串的方法,这些二进制字符串较少依赖于结构打包以及不同可执行文件之间可能不同的其他内容。

boost :: interprocess,boost :: serialize和协议缓冲区应该是独立于平台的,所以从技术上讲它也可以在Linux / Mac上运行!

答案 1 :(得分:5)

DCOM具有基于DCE RPC的远程过程调用机制。如果您将系统构建为COM组件或将COM包装器放在要公开的API上,则可以使用它。除此之外,您可能希望通过更深入地了解问题的具体细节来扩展您的问题。我真的没有处理问题是否有任何可能妨碍使用DCOM的方面。

另一种方法是在应用程序周围放置Web服务包装器。 Web服务(当然基于SOAP或XML-RPC的服务)实际上只是使用HTTP作为传输协议的RPC机制。

答案 2 :(得分:3)

这里有更多信息:
在文件夹... \ Samples \ NetDS \ RPC
上安装视图样本后,获取“适用于Windows Server 2003 R2的Microsoft Platform SDK” sdk_NetDS_RPC.exe - 来源样本 soapsdk.exe - MS样本
更多链接:
Trace RPC Calls and Notify the COM+ Events to Your Program
FastRpc
secure rpc
A lightweight RPC library based on XML and HTTP.
旧帮助,但有用RPC.HLP
[MS-RPCE]: Remote Procedure Call Protocol Extensions
[MS-RPCH]: Remote Procedure Call over HTTP Protocol Specification
[MS-COM]: Component Object Model Plus (COM+) Protocol Specification DCOM

答案 3 :(得分:2)

您可以通过一百种不同的方式在Windows上远程调用代码;套接字,DCom等......微软在一个阶段支持rpcgen(基于DCE RPC),它允许你定义远程API调用,它的编译器会编写粘合代码。这是DCOM中的底层。

它与UNIX ONC-RPC不兼容,它更易于使用且标准更广泛。如果像DCOM这样的某些东西不适合你,你可能想看看one of the ONC_RPC toolkits

答案 4 :(得分:1)

是的我同意Isalamon - 只使用已经内置MIDL的真正RPC。你可以得到一本关于DCE RPC的O'Reilly书。如果您在同一台机器上,只需使用ncalrpc的绑定主机。

答案 5 :(得分:0)

Here是我们1996年在Cheyenne Software on Win NT上用于InocuLAN防病毒的东西。这是纯粹的RPC,没有OO层。我希望它仍然适用于较新的Windows。

答案 6 :(得分:0)

嗯,根据复杂性,开销和反向速度排序,我想到了这些可能性:

  • SOAP(您已将其排除)
  • Corba
  • DCOM(DCE)
  • 交换XML消息
  • ONC-RPC(SunRPC)
  • 交换类似HTTP的消息
  • 交换类似telnet的消息(面向行)

对于所有人来说,你或多或少都可以使用(准备好受挫)库,包等作为开源。

上面的一些可能听起来很奇怪,但实际上,我们经常使用HTTP或Telnet来实现RPC。原因是你不需要花哨的环境来测试,任何大多数外星人的软件都可以很容易地适应它。这些也使您的程序服务可以从WebBrowser,telnet会话或其他只是打开套接字并发送请求的程序中轻松使用。例如,我的大多数程序都包含一个--scripting命令行参数,它打开一个telnet端口,通过它可以通过类似JavaScript的语言发送访问整个应用程序对象模型。这也可以非常容易地用于远程控制任何应用程序 - 无需任何努力。如果您曾编写过一次这样的框架,则可以为每个新应用程序重复使用它(看看它看起来如何here

我必须承认,我的所有应用都是在一个环境中编写的,其中所有上述内容都已包含在内,可以随时使用,无论是作为客户端还是作为服务器。

总结:使用最简单的东西,就是工作。除非您的应用需要集成到这样的基础架构中,否则您不需要Corba或SOAP。