"Service-oriented architecture (SOA) is a software design and software architecture design pattern based on structured collections of discrete software modules, known as services, that collectively provide the complete functionality of a large software application. The purpose of SOA is to allow easy cooperation of a large number of computers that are connected over a network. Every computer can run an arbitrary number of programs - called services in this context - that are built in a way that they can exchange information with any other service within the reach of the network without human interaction and without the need to make changes to the underlying program itself." ~Wikipedia
What is SOA?
SOA or Service oriented architecture for development and integration of service based applications. development and integration of services that use different platforms. services should be loosely coupled with operating systems and the technologies of underlying applications ,SOA is all about reducing coupling ,none of efferent and afferent coupling. SOA is not the same as Web services, see here for more information about differences. SOA is more than a set of technologies that runs independent of any specific technologies. SOA is directly built upon the principle of service-orientation, which talks about services with simple interface that can be accessed independently by users without worrying about the actual platform implementation of the service.
Services are the basic building blocks in a Service Oriented architecture, A service is a self-contained unit of software that performs a specific task. "It has three components: an interface, contract, and implementation. The interface defines how a service provider will perform requests from a service consumer, the contract defines how the service provider and the service consumer should interact, and the implementation is the actual service code itself." Because the interface of a service is separate from its implementation, a service provider can execute a request without the service consumer knowing how it does so; the service consumer only worries about consuming services. Services should be self-contained business functionality, encapsulate one action, independent of other service, Not affect other service ,secure , communicate with each other synchronously.
Services communicate with each other using messages. Messages are standard formats which every service can read and understand. SOA supports the concept of dynamic service discovery. The service consumer queries the "service registry for a service, and the service registry returns a list of all service providers that support the requested service. The consumer selects the cost-effective service provider from the list, and binds to the provider using a pointer from the service registry entry. The consumer formats a request message based on the contract specifications, and binds the message to a communications channel that the service supports. The service provider executes the service and returns a message that conforms to the message definition in service contract. The only dependency between provider and consumer is the contract, which the third-party service registry provides. The dependency is a runtime dependency and not a compile-time dependency. All the information the consumer needs about the service is obtained and used at runtime. The service interfaces are discovered dynamically, and messages are constructed dynamically. The service consumer does not know the format of the request message or response message or the location of the service until the service is actually needed.
Service oriented Programming
We have progressed from functions of traditional procedural programming, to objects of OOP and now to services. In SOA functions and tasks are created as loosely connected independent services communicating via messages. Service provider publishes the service via standard interfaces in a publicly accessible directory called Service Repository and Service consumer make a service request and in response gets the Service Response. it's better to separete the messaging and interfaces of service to separete layers.
SOA and SOAP
SOA is a set of guidelines for designing loosely-coupled software systems. but SOAP (Simple Object Access Protocol) is a protocol that allows web services to communicate with one another.