The Windows Communication Foundation (WCF), previously known as Indigo, is a free and open-source runtime and a set of APIs in the .NET Framework for building connected, service-oriented applications.

.NET Core 1.0, released 2016, did not support WCF server side code. WCF support was added to the platform with support for .NET Core 3.1, .NET 5, and .NET 6 in 2022.

The architecture

WCF is a tool often used to implement and deploy a service-oriented architecture (SOA).
It is designed using service-oriented architecture principles to support distributed computing where services have remote consumers. Clients can consume multiple services; services can be consumed by multiple clients. Services are loosely coupled to each other. Services typically have a WSDL interface (Web Services Description Language) that any WCF client can use to consume the service, regardless of which platform the service is hosted on. WCF implements many advanced Web services (WS) standards such as WS-Addressing, WS-ReliableMessaging and WS-Security. With the release of .NET Framework 4.0, WCF also provides RSS Syndication Services, WS-Discovery, routing and better support for REST services.

Endpoints
A WCF client connects to a WCF service via an endpoint. Each service exposes its contract via one or more endpoints. An endpoint has an address (which is a URL specifying where the endpoint can be accessed) and binding properties that specify how the data will be transferred.

The mnemonic "ABC" can be used to remember address/binding/contract. Binding specifies what communication protocols are used to access the service, whether security mechanisms are to be used, and the like. WCF includes predefined bindings for most common communication protocols such as SOAP over HTTP, SOAP over TCP, and SOAP over Message Queues, etc. Interaction between WCF endpoint and client is done using a SOAP envelope. SOAP envelopes are in simple XML form, which makes WCF platform-independent. When a client wants to access the service via an endpoint, it not only needs to know the contract, but it also has to adhere to the binding specified by the endpoint. Thus, both client and server must have compatible endpoints.

With the release of the .NET Framework 3.5 in November 2007, Microsoft released an encoder that added support for the JSON serialization format to WCF.

Behaviors
Behaviors are types that modify or extend service or client functionality. Behaviors allow the developer to create custom processing, transformation, or inspection that is applied to messages as they are sent or received. Some examples of uses for behaviors are:

 Controlling whether metadata is published with a service.
 Adding security features to a service, such as impersonation, authorization, or managing tokens
 Recording information about messages, such as tracking, tracing, or logging
 Message or parameter validation
 Invoking all additional operations when messages are received—such as notifying users when certain messages arrive

Behaviors implement the IServiceBehavior interface for service extensions, the IEndpointBehavior for endpoints, the IContractBehavior interface for service contracts, or the IOperationBehavior for operations. Service behaviors are used for message processing across a service, rather than processing that would be specific to a single operation.

Interoperability
WCF supports interoperability with WCF applications running on the same Windows machine or WCF running on a different Windows machines or standard Web services built on platforms such as Java running on Windows or other operating systems. In addition to SOAP, WCF 4 supports non-SOAP XML, RSS, JSON, and binary formats for external communication via HTTP or HTTPS.

See also

Microsoft Connected Services Framework
Web Services Enhancements
Service Component Architecture (SCA) and Service Data Objects (SDO), which are alternatives to WCF in the Java world standardized by OASIS.
WCF Data Services

References

Further reading
 Craig McMurtry, Marc Mercuri, and Nigel Watling: Microsoft Windows Communication Foundation: Hands-On, SAMS Publishing, May 26, 2004, 
 Steve Resnick, Richard Crane, Chris Bowen: Essential Windows Communication Foundation (WCF): For .NET Framework 3.5, Addison-Wesley, February 11, 2008, 
 Craig McMurtry, Marc Mercuri, Nigel Watling, Matt Winkler: Windows Communication Foundation Unleashed (WCF), Sams Publishing, March 6, 2007, 
 Juval Löwy: Programming WCF Service, O'Reilly Media, Inc., February 20, 2007, 
 Pablo Cibraro, Kurt Claeys, Fabio Cozzolino, Johann Grabner: Professional WCF 4: Windows Communication Foundation with .NET 4, Wrox, June 15, 2010, 
 Andrew Zhu: Microsoft Windows Workflow Foundation 4.0 Cookbook:Chapter 3, Packt Publishing, September 2010,

External links

Windows Communication Foundation, MSDN Windows Communication Foundation portal.
MSDN Library: Windows Communication Foundation
WCF Security Guide , Microsoft Patterns & Practices - Improving Web Services Security: Scenarios and Implementation Guidance for WCF. Released Aug 1, 2008.
Understanding WCF Services in Silverlight 2  - In depth explanation of WCF services for Silverlight clients.
David Chappell: "Introduction to WCF" and "Dealing with Diversity", two papers covering WCF. November 2007.
Getting Started with WCF RIA Services - part 1 of the series articles on WCF RIA Services

.NET terminology
Windows communication and services
Formerly proprietary software
Free and open-source software
Communication Foundation
Microsoft free software
Object request broker
Software using the MIT license
Windows Server 2008
Windows Vista
Windows Communication Foundation
Windows Communication Foundation
2006 software
윈도우 커뮤니케이션 파운데이션(Windows Communication Foundation, WCF)은 응용 프로그램을 한 대의 컴퓨터나 네트워크에 연결된 여러 컴퓨터를 걸쳐 통신할 수 있게 만들어 주는 새로운 통신 하부 시스템이다. WCF 응용 프로그램들은 닷넷 런타임을 대상으로 하는 언어를 사용하여 개발할 수 있다.

닷넷 프레임워크 3.0의 일부로 도입된 4 개의 API 중 하나이며 윈도우 비스타, 윈도우 서버 2008에 포함되어 있다. 윈도우 XP, 윈도우 서버 2003에서도 지원된다.

개요 
WCF 프로그래밍 모델은 웹 서비스, 닷넷 리모팅, MTS, 그리고 메시지 쿼리를 하나의 서비스 지향 프로그래밍으로 통합한다. 로컬 컴퓨터, 랜, 인터넷 안의 프로세스 통신어를 위한 단일 API와 더불어 웹 서비스 개발에 대한 고속 개발 도구 방식을 제공하기 위해 고안된 것이다. WCF는 모래상자(sandbox) 안에서 실행되며 모든 닷넷 응용 프로그램이 제공하는 강화된 보안 모델을 제공한다.

WCF는 두 개의 프로세스 사이의 통신을 위해 SOAP 메시지를 사용한다. 그럼으로써 WCF 기반 응용 프로그램을 SOAP 메시지를 통해 통신하는 다른 프로세스와 상호 운영할 수 있게 만들어 준다.
WCF 프로세스가 WCF가 아닌 프로세스와 통신할 때, XML 기반 인코딩은 SOAP 메시지를 위해 사용되지만, 다른 WCF 프로세스와 통신할 때에는 SOAP 메시지는 최적화된 이진 포맷으로 인코딩된다. SOAP 포맷의 데이터 구조에 순응하는 인코딩들 둘 다 정보 세트라고 부른다.

서비스 지향 아키텍처 
WCF는 서비스 지향 아키텍처 원칙과 부합하도록 설계되어 있으며 서비스가 소비자에 의해 소비되는 분산 컴퓨팅을 지원한다. 클라이언트들은 여러 개의 서비스를 소비하며 서비스들은 여러 대의 클라이언트에 의해 소비될 수 있다.
서비스들은 보통 WCF 클라이언트가 서비스 소비에 사용할 수 있는 WSDL 인터페이스를 가지고 있다. WCF는 WS 어드레싱, WS 신뢰 메시지, WS 보안과 같은 수많은 고급 웹 서비스 (WS)를 사용한다.

WCF 서비스 
WCF 서비스는 세 개의 부분으로 이루어져 있다.
서비스 클래스: 제공되는 서비스가 추가되어 있다.
호스트 환경: 서비스를 호스트한다.
하나 이상의 종착점: 클라이언트가 연결되는 곳이다.
WCF 서비스의 모든 통신은 종착점을 통해 이루어진다. 이러한 종착점은 어떠한 방식의 서비스 클래스가 종착점을 통해 접근될 것인지를 정의하는 계약(Contract)을 지정한다. 각 종착점은 다른 모임의 방식을 드러낼 수도 있다. 종착점은 또한 어떻게 클라이언트가 종착점이 호스트되는 서비스, 주소와 통신하는지 지정하는 묶음(binding)으로 정의한다.

WCF는 WCF 서비스를 호스팅하는 데에 사용할 수 있는 윈도우 활성화 서비스를 제공한다. 아니면 WCF 서비스는 또한 WCF에 의해 제공되는 인터넷 정보 서비스나 "ServiceHost 클래스를 사용하는 프로세스" 안에서 호스팅될 수 있다. 서비스들은 자체 호스팅을 할 수도 있다.

WCF 서비스의 정의 
WCF 서비스 클래스는 서비스를 메소드로 추가하고 있다. 적어도 1개의 서비스 계약(Contract)이 정의되고 서비스가 실행할 수 있는 조작이 정의된다. 계약(Contract)은 .NET Attributes를 사용해서 정의된다. 옵션으로 데이터 계약의 정의를 할 수 있고 이용할 수 있는 데이터의 종류를 기술할 수 있다.

계약은 .NET Attributes를 사용해 정의된다. WCF 서비스로 공개된 클래스에는 ServiceContract 속성을 부여하거나, 그 속성이 부여된 인터페이스를 갖출 필요가 있다. 클라이언트가 SOAP 메시지를 사용해 호출할 메소드에는 OperationContract속성을 부여해야 한다.

하나 이상의 종착점의 정의 
WCF클라이언트는 종착점(End Point)을 통해 WCF 서비스와 접속이 된다.

각 서비스는 1개 이상의 종착점을 통해 계약(Contract)을 공개한다. 종착점에는 URL로 표시된 주소가 있고, 바인팅 프로퍼티에서 데이터의 전송방식을 지정한다.

Address/Binding/Contract 3개의 요소를 "ABC"라고 한다. 바인딩에는 서비스에 접속할 때 사용되는 통신 프로토콜, 세큐리티 기구의 종류 등이 지정된다.

같이 보기 
 닷넷 프레임워크
 윈도우 비스타

WCF에 대한 추가 리소스 정보 
Microsoft Windows Communication Foundation: Hands-On, Craig McMurtry (Computer Books Author), Marc Mercuri, and Nigel Watling, SAMS Publishing, May 26, 2006.

외부 링크 
 윈도우 커뮤니케이션 파운데이션, MSDN 윈도우 커뮤니케이션 파운데이션 포털.
 윈도우 커뮤니케이션 파운데이션, 마이크로소프트의 WCF 정보 및 샘플 웹 사이트.
 윈도우 커뮤니케이션 파운데이션 길잡이, 윈도우 커뮤니케이션 파운데이션에 대한 온라인 길잡이.
 WinFX 베타 페이지, 마이크로소프트의 WinFX 사이트.
 David Chappell: "Introducing Indigo: An Early Look", 2005년 2월
 The .NET Show: Longhorn Indigo, 2005년 2월
 WCF section on NetFXGuide.com
 윈도우 커뮤니케이션 파운데이션 학습 길잡이 (SearchVB.com)
 헬로 월드 예제 ('Indigo')  인디고를 사용한 헬로 월드 예제
 WCF 서비스 호스팅 및 소비 (Chris Peiris & Dennis Mulder, Avanade)

윈도우 비스타
마이크로소프트 API
닷넷 프레임워크