When I understood the meaning of SOA, first feeling I got, that RMI taken from Object level communication to Component level.
This is how I look at whole evolution of SOA:

Monolithic Applications:
First came, procedural language to build very large scale application systems.

Structured Object Oriented:
With monolithic approach, larger systems were enormously complex and hard to maintain. Solution was to divide a system into smaller logically divided units based on functionality.

Client and Server:
Logical progression of OO – Grouping objects/functions on one computer and calling these from others.

3 Tier App:
Now, server wanted to control some of its resources by itself and provide services. To access caged functionality, one extra layer added to Client/Server model.

N Tier App:
For simplify more complicated systems, layered request/response agreement installed between application/layers.

Distributed Objects (DO):
Back to freedom to interact with object on N-Tier systems, an ubiquitous and heterogeneous system evolved to interact with orthogonal objects (not one-to-one interactions).

DO created many objects interacting with many object on many computers. Solution emerged by aggregation of logically/functionally connected objects into components and design uniform interfacefor communications.

Service Oriented Architecture:
Now these orthogonal interacting components needs simplified, publishable and accessibility through a service provider proxies which provides widely accepted standard interface.

What next? May be….
Centralized Service Model, Contract Oriented Architecture, IMakeNUBreakArchitecture etc.. ūüėČ