Service Oriented Architecture (SOA) and WCF

As business requirements are always changing, updates and modifications need to be made quickly. In traditional architecture, all components are bundled together, which means to make one update, a number of other components need to be recompiled and redeployed. The processes of gathering requirements, designing, development, QA, and deployment are too long for businesses to wait for, and become actual bottlenecks. To complicate matters further, some business processes are no longer static. Requirements change regularly, and a business needs to be able to redefine its own processes quickly and easily. Existing traditional infrastructure and systems make changes very difficult, but Service Oriented Architecture is an efficient alternative.

SOA is an architectural design pattern where its design is determined by several guiding principles. Essentially, SOA states that every component of a system should be a service or business process, and the system should be composed of several independent, loosely-coupled services. Services are designed and implemented so that they can serve different purposes or processes, and not just specific ones. The key concepts of SOA are services, high interoperability and loose coupling. SOA is not a specific technology or language, but a system design approach. It is an architecture model that aims to enhance the efficiency, agility, and productivity of an enterprise system. The difference between SOA and other approaches like RPC, DCOM, and CORBA is that SOA is trying to address the problem from the client side, and not from the server side. By decoupling the client side from the server side, the client side application is much easier to develop and maintain. A change to one service does not affect any other service. Also, the deployment of a new service does not affect any existing service. This greatly eases release management and makes SOA very agile. Without SOA, the client-side application is often compiled and deployed along with the server-side applications. This makes it impossible to quickly change anything on the server side. The client-side applications remain tightly coupled with remote objects, and any change to the remote object will still result in a recompiling or redeploying of the client application. However with SOA, the client applications no longer see them as objects, but services.  The client application interacts with these services by exchanging messages, and only knows the interfaces, or protocols of the services.

SOA can be implemented by using web services, particularly with WCF services.  WCF is an umbrella technology that covers ASMX web services, .NET remoting, WSE, Enterprise Service, and System.Messaging. WCF is configurable to communicate with web services using both SOAP and XML messages. Because WCF can communicate using web service standards, interoperability is straightforward with other platforms that also support SOAP, such as the leading J2EE-based application servers. It supports a large set of the WS-* specifications, and helps to provide reliability, security, and transactions when communicating with any platform that supports these specifications. Microsoft also developed WCF to be one of the fasted distributed application platforms.
All client applications communicate with a service through its interface, and its interface will remain stable once it is in production. If we have to change the implementation of this service, for example by fixing a bug, or changing an algorithm inside a method of the service, all of the client applications can still work without any change.
When combined with the more mature Business Process Management (BPM) technology, SOA plays an even more important role in an organization’s efforts to achieve agility. Business users can create and maintain processes within BPM, and through SOA they can plug a service into any of the processes. The front-end BPM application is loosely coupled to the back-end SOA system. This combination of BPM and SOA will give an organization much greater flexibility in order to achieve agility.

Copyright © All Rights Reserved - C# Learners