If distributed computing were nothing more than an exercise in getting information from one process/thread to another, any of the above solutions would do. Unfortunately, the passing of information between processes is rather trivial in comparison with some of the other issues which manifest themselves in distributed systems. Many technologies fail to address any of these additional issues, worse still, some go as far as to try and hide them entirely.
Given the above, comparing and contrasting these varying technological approaches is difficult because they all tend to adopt a particular view on what the problems of distributed computing are. Thus the best way forward is for the designer/implementers to be aware of all the issues and select the technology most appropriate for their circumstances and the problem set they're trying to address.
So, what are the issues? Here's some suggested reading to get you started: