Die Service-orientierte Architektur (Service-Oriented Architecture, SOA) ist ein Architekturkonzept, welches Systemarchitekturen beschreibt, die sich im Wesentlichen aus Diensten zusammensetzen. Nach den Vorstellungen der Softwarearchitektur ist eine Architektur eines Softwaresystems durch eine Konfiguration von Komponenten und Konnektoren beschrieben. Eine bestimmte Konfiguration bildet dabei gerade eine konkrete Architektur. Werden diese Vorstellungen auf das Konzept der SOA überführt, so entsprechen die Komponenten einer (dienstorientierten) Architektur den Diensten, die Konnektoren den verschiedenen möglichen Interaktionen zwischen Diensten.
Dabei benennt das Konzept Service-Oriented Architecture im Wesentlichen drei Komponenten einer Service-orientierten Architekur (siehe Abbildung):
Service Providers Service Registries Service Requestors
Des Weiteren werden durch das SOA-Konzept auch Basisinteraktionen beschrieben, die auf der Konzeptebene den Konnektoren einer Service-orientierten Architektur entsprechen:
• Registrierung eines Dienstes (register, RegisterConnector)
• Suchen und Finden eines Dienstes (find, FindConnector)
• Herstellen der Bindung zu einem Dienst (bind, BindConnector)
• Stellen einer Anfrage an einen Dienst (execute, ExecuteConnector)
Eigenschaften von SOAs Service-Oriented Architectures verfügen über einige besondere Eigenschaften, die sie von anderen Architekturmodellen abheben. Die wohl wichtigste ist, dass Service-Oriented Architectures weitgehend transparent sind.
SOAs bauen auf einem Paradigma auf, welches besagt, dass die Realisierung eines Dienstes strikt von seiner Beschreibung getrennt ist. Konkret bedeutet dies, dass zu jedem Dienst eine separate Schnittstelle (service interface) existiert, die den Dienst eindeutig beschreiben kann. Unter Zuhilfenahme von plattformunabhängigen Beschreibungstechniken wie der Web Service Description Language ( WebServices WSDL), kann somit nicht nur der Dienst, sondern sogar die zur Realisierung verwendete Plattform abstrahiert werden. Die Realisierung der einzelnen Dienste ist somit transparent und das Gesamtsystem heterogen und interoperabel.
Es besteht beispielsweise die Möglichkeit, Dienste in Java, CORBA oder Micosoft .NET zu realisieren. Sofern zur Beschreibung WSDL (oder etwas Äquivalentes) verwendet wird, ist es möglich, die Dienste auf anderen Basismaschinen zu nutzen. Populäre Beispiele existieren von Trivialbeispielen – Nutzen eines Java-Web Services in einer .NET-basierten Anwendung – bis hin zu komplexen Einsatzszenarien im Bereich der EAI - Enterprise Application Integration.