Having worked with it for quite a while, I'm a keen user of the CORBA middleware framework for distributed apps. It's not very popular in general though for a number of good reasons:
- Making it play nicely with the internet is difficult - you often need to run a gateway because some implementations don't understand NAT.
- It's a pretty steep learning curve, and while it tries to hide the complexities of what's going on underneath it can't quite manage to hide them completely.
I know it's still used extensively in the financial sector, at least, for in-house distributed systems. One major advantage it has over a language-specific middleware (like .NET remoting/WCF) is that it is language agnostic, and implementations exist for many different languages. That means you can implement your server interface on some ancient back-end database server in C++, and then write a client in Java or .NET which talks to it.
Other alternative, more modern middleware frameworks include ICE and Apache Etch.
Things like SOAP and XML-RPC also provide similar network service interfaces. They are a lower-level specification than the ones above, and indeed can be used as the underlying network protocol in some cases.