2009-01-15 179 views
4

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

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

编辑:

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

我也会考虑DCOM。

回答

6

如果你只在同一台机器上的进程之间的谈话感兴趣,boost::interprocess是得到一个渠道,他们交谈通过一个很酷的方式。

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

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

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

+0

为共享内存映射文件解决方案提供的链接实际上是在Windows上执行ipc的许多不同方式的列表:http://msdn.microsoft.com/zh-cn/library/aa365574(VS.85).aspx – Laserallan 2009-01-15 13:41:37

5

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

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

+0

考虑到以后的更新,普通的COM就足够了。 – MSalters 2009-01-15 15:14:42

2

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

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

托尼

0

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

0

好,通过复杂排序,开销和反向速度,这些可能性都在我的脑海:

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

对于所有,你会得到更多或更少的准备使用(准备受挫)库,包等开源。

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

我不得不承认,我所有的应用程序都是在一个环境中编写的,已经包括并准备使用,既作为客户端也作为服务器。

摘要:使用最简单的东西,即做这项工作。除非您的应用程序需要集成到这样的基础架构中,否则您不需要Corba或SOAP。

3
1

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