Well, sorted by complexity, overhead and reverse speed, these possibilities come to my mind:
- SOAP (which you excluded already)
- Corba
- DCOM (DCE)
- exchange of XML messages
- ONC-RPC (SunRPC)
- exchange of HTTP-like messages
- exchange of telnet-like messages (line oriented)
For all, you will get more or less ready to use (ready to be frustrated) libraries, packages etc. as open source.
Some of the above might sound strange, but actually, we do often use HTTP or Telnet for RPC. The reason is that you don't need fancy environments to test, any most alien software can easily adapt to it. These also make your program's services easily usable from either a WebBrowser, a telnet session or another program which simply opens a socket to it and sends the request. For example, most of my programs include a --scripting command line argument, which opens a telnet port via which you can send access the whole applications object model via a JavaScript like language. This can also be used to remote control any app very easily - without any effort. If you have written such a framework once, it can be reused for every new app (see how that looks here)
I have to admit, that all of my apps are written in an environment, where all of the above are already included and ready to use, both as clients and as servers.
Summary: use the simplest thing, that does the work. You dont need Corba or SOAP unless your app needs to be integrated into such an infrastructure.