SOAP is a general-purpose communication facility, so it can be used for most applications. Its key benefits are that it supports heterogeneous connectivity, easy traversal of firewalls, and loosely coupled connections. The first two benefits are pretty self-explanitory. Loosely coupled connections make SOAP very flexible and adaptable. Most distributed computing technologies use tightly coupled connections, which can break very easily. SOAP systems have the ability to dynamically interpret the self-described information being exchanged, and therefore can tolerate a lot more variance in the message. SOAP's sweet spot is a system that involves applications running on multiple platforms, written in different languages, particularly where you don't have control over the IT infrastructure for the entire system, and where the players involve might change.
But SOAP is not appropriate for all applications. SOAP messages are very verbose, and every message requires some costly XML processing. So I would not recommend using SOAP when you need to pass extremely large amounts of data, or if your application requires exceptionally high or deterministic performance.
I also would not recommend using SOAP as a replacement for RMI or DCOM between small components. SOAP should be used to expose a business service rather than to expose every object method. A SOAP service generally represents an aggregation of objects or components, and the objects/components use a binary protocol (RMI or DCOM) to communicate within the service.
This was first published in March 2002