远程过程调用

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

我无法find关于如何做到这一点的许多信息,msdn只有.net版本。

编辑:

感谢迄今为止的答案。 我需要的是与同一台计算机上的服务进行通信,这个计算机会将进度报告发送回“客户端”。 我之所以介绍rpc,是因为vista的uac和服务不能和正常的应用程序交谈,除非他们使用rpc或pipe道。 纵观pipe道,它们似乎完全是基于文本的,我的印象是rpc可以传递强types值。

我也会考虑DCOM。

Solutions Collecting From Web of "远程过程调用"

如果你只对同一台机器上的进程之间的通话感兴趣, boost :: interprocess是一个很酷的方式来获取他们的通道。

更多的Windows特定解决方案是共享内存映射文件和系统全局互斥/信号或命名管道 。

boost :: serialize和google 协议缓冲区是将进程之间发送的数据转换为二进制字符串的方式,二进制字符串较少依赖于结构打包和其他可能不同的可执行文件之间的差异。

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

DCOM具有基于DCE RPC的远程过程调用机制。 如果将系统构建为COM组件,或者将COM包装器放在需要公开的API上,则可以使用此方法。 除此之外,您可能需要更深入地了解问题的具体细节。 我并没有真正掌握这个问题是否有任何可能妨碍使用DCOM的方面。

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

这里有更多的信息:
安装在文件夹… \ Samples \ NetDS \ RPC上查看示例后,获取“Microsoft Platform SDK for Windows server 2003 R2”
sdk_NetDS_RPC.exe – 源码示例soapsdk.exe – MS示例
更多链接:
跟踪RPC调用并将COM +事件通知给您的程序
FastRpc
安全的rpc
基于XML和HTTP的轻量级RPC库。
旧的帮助,但有用的RPC.HLP
[MS-RPCE]:远程过程调用协议扩展
[MS-RPCH]:通过HTTP协议规范的远程过程调用
[MS-COM]:组件对象模型Plus(COM +)协议规范DCOM

您可以通过几百种不同的方式在窗口上远程调用代码。 套接字,DCOM等…微软在一个阶段支持rpcgen(基于DCE RPC),它允许您定义远程API调用,它的编译器将编写胶水代码。 这是DCOM中的底层。

它与UNIX ONC-RPC不兼容,它更易于使用和更广泛的标准。 如果像DCOM这样的东西不适合你,你可能想看看其中一个ONC_RPC工具包 。

托尼

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

这是我们在1996年在Win NT上的Cheyenne Software for InocuLAN杀毒软件中使用的。 这是纯粹的RPC,不是OO层。 我希望它仍然在更新的Windows中可用。

那么,按照复杂性,开销和倒退速度排序,这些可能性就会浮现在我的脑海里:

  • SOAP(你已经排除了)
  • CORBA
  • DCOM(DCE)
  • 交换XML消息
  • ONC-RPC(SunRPC)
  • 交换类似HTTP的消息
  • 交换类似telnet的消息(面向行)

对于所有人来说,你将会或多或少准备好使用(准备好被挫败)的库,软件包等作为开源代码。

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

我不得不承认,我所有的应用程序都是在一个环境中编写的,上面所有的应用程序都已经包含在内,并可以随时用于客户端和服务器。

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