I have personally done quite a bit with SOA, personally I love the stuff, but before I go further here are the areas I have found SOA to be lacking...
- real time systems
- music
- video
- encrypted data
- compressed data
Real time systems tend to have strict performance bottle necks. While I believe it can be made to work, I think the cost to make it to work with real time systems is more expensive than simply doing each integration individually (cost of increased bandwidth and server space).
The problem with music, video, encrypted data, and compressed data is SOA works well with metadata but not so well with data that is better represented as a matrix or a vector. The best litmus test to see if it should be added to this category is: would the xml version of the data look like a bunch of numbers? Or would it have meaningful text. If the answer is a bunch of numbers, SOA is proably not the right solution.
Now that being said. Where I love SOA is with product integration. Personally given two perfectly equal products, one supports an xml (with a schema) stream of some kind (doesn't have to be SOAP over http can be for example straight xml over tcp) and the other is only binary data; I would take the first one hands down. Integration of xml streams is so much easier than integration of binary streams.
The biggest problem with binary data, is the lack of metadata. While xml data is verbose enough, with a little domain knowledge I can generally figure out what it is doing. Also there are enough standards (for example xquery, xslt)out there, that with xml data I can split and recombine xml data into a new compiled document from seperate services which may no nothing as each... kind of like a distrubited dynamic database where any program can represent a set of tables, and their information can be accessed and manipulated at will.
Salindor