This question already has an answer here:
What is the real difference between component-based software engineering and Service Oriented Architecture?
Clemens Szyperski and David Messerschmitt present the following five principles that a software component should have:
- Composable with other components
- A unit of independent deployment and versioning
Erl recognizes the following characteristics for SOAs:
- Loose Coupling: minimum amount of interdependencies between services
- Service Contract: the interaction between services is based on a communi- cation and document agreement
- Autonomy: services control the logic they encapsulate.
- Abstraction: services hide their internal logic from the external environment except those parts that are described in the service contract.
- Reusability: dividing logic to services promotes reuse.
- Composability: services can be assembled from other services
- Statelessness: minimum amount of activity specific information is stored.
- Discoverability: the existence of discovery mechanisms so that services can be discovered by their users
A good article is http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.111.9582
As you have noticed, there are already questions about SOA that have an answer. But my question is a little bit more specific, because it looks for a comparison with Component Based Software Engineering.
A similar question to mine is How Service-oriented architecture and Component-based development relate to each other?