Keep your mind!!!
  • Control Panel
  • Write a Post

What are your interests?

  • Cover
  • Entry
  • Announcements
  • Cloudtags
  • l6nlogs
  • Tagkeywords
  • Guestbook

[펌]WCF 아키텍처 개요 - WCF 클래스 계층구조를 중심으로

  • Posted at 2009/08/25 16:40
  • Filed under Enhance your ability(IT)/WCF
[MSDN 아티클 번역/요약 시리즈 001] 

WCF 아키텍처 개요 - WCF 클래스 계층구조를 중심으로

원문제목: Windows Communication Foundation Architecture Overview, Microsoft Corporation, March 2006

http://msdn.microsoft.com/winfx/technologies/communication/default.aspx?pull=/library/en-us/dnlong/html/wcfarch.asp 



번역/요약; (주)엔소아컨설팅그룹, 선임 컨설턴트 김지선. 2006년 8월


 


------------------------------------------------------------------------------------------


WCF(Windows Communication Foundation) 서비스는 엔드포인트(혹은 끝점, endpoint)들의 컬렉션을 제공하는데, 각 엔드포인트는 외부와 통신하기 위한 입구 역할을 한다. 클라이언트는 하나나 그 이상의 엔드포인트와 메시지를 교환하는 프로그램으로, 서비스로부터 메시지를 받기 위해서 엔드포인트를 노출한다.

 


1. ServiceEndpoint 클래스

ServiceEndpoint는 ①주소(address), ②바인딩(binding), ③계약(contact)으로 구성된다. 이것들의 첫글자만 따서 엔드포인트의 ‘ABC’라고 부른다. ①주소는 해당 엔드포인트가 있는 위치의 네트워크 주소를 말하는데, EndpointAddress 클래스가 WCF 엔드포인트 주소를 나타내는 역할을 담당한다. ②바인딩은 엔드포인트가 외부와 통신하기 위해 필요한 방식, 즉 (TCP, HTTP 등의) 전송 프로토콜, (텍스트, 바이너리 등의) 인코딩, (SSL, SOAP 메시지 보안 등의) 보안 요구사항 등을 지정한다. Binding 클래스가 WCF 바인딩을 정의하는 역할을 담당한다. ③계약은 단방향(one-way), 이중(duplex), 요청/응답(request/reply)과 같은 기본 MEP(Message Exchange Pattern)로 처리되는 메시지의 컬랙션이다. ContractDescription 클래스가 WCF 계약을 수행하는 역할을 담당한다.


 

2. EndpointAddress 클래스


EndpointAddress 개체는 기본적으로 URL, ID, 헤더(header)로 구성된다. 엔드포인트의 보안 ID는 일반적으로 URI이지만, 보안이 중요한 시나리오에서는 Identity 주소 속성을 사용해 URI와 관계없이 명시적으로 설정할 수 있다. 헤더는 선택적(optional)인 사항으로, URI가 아닌 다른 형태의 주소 정보를 추가로 제공할 때 사용된다. 예를 들어 여러 엔드포인트들이 동일한 URL 주소를 사용할 경우 이 엔드포인트들을 구별할 때 유용하다.


 

3. Binding 클래스

Binding 개체는 이름(name), 네임스페이스(namespace), 바인딩 요소(binding element)들로 구성된다. 이름과 네임스페이스는 서비스의 메타데이터 내에서 해당 바인딩을 식별해내기 위해 사용된다. 바인딩 요소는 엔드포인트가 외부와 통신하기 위한 방법을 정의한다.


 

4. ContractDescription 클래스

ContractDescription 클래스는 엔드포인트가 외부와 통신할 때 필요한 계약과 오퍼레이션(operation)을 지정하기 위해 사용된다. ContractDescription 내에 있는 각 Contract 오퍼레이션에는 OperationDescription이 포함되는데, 이것은 동작이 단방향 방식인지 혹은 요청/응답 방식인지 등과 같은 동작 방식을 지정한다. 또한 각 OperationDescription마다 MessageDescription들의 컬렉션을 사용해 오퍼레이션을 구성하는 메시지들을 지정한다. 각 계약에는 바인딩과 마찬가지로 서비스의 메타데이터 내에서 해당 계약을 고유하게 식별하기 위해 이름과 네임스페이스가 사용된다. 또한 계약의 동작(behavior)을 수정하고 확장하는 모듈인 IContractBehavior가 포함되기도 한다.



5. Behavior 타입들

동작(behavior)은 서비스나 클라이언트 기능을 수정하고 확장하는 타입이다. 동작은 채널을 구축하는 프로세스에도 관여하며 (사용자가 지정한 설정에 따라 혹은 서비스나 채널의 다른 측면에 근거해) 그 채널을 수정할 수 있다. 앞에 언급했듯이 계약 동작(behavior)은 IContractBehavior를 구현한 타입으로 동작을 수정하고 확장한다. 서비스 동작은 IServiceBehavior를 구현한 타입으로 서비스에 적용된다. 마찬가지로 채널 동작은 IChannelBehavior를 구현한 타입으로 클라이언트 채널에 적용된다.


 

6. ServiceDescription 클래스

ServiceDescription 클래스는 (서비스에서 제공하는 엔드포인트, 서비스에 적용된 동작, 서비스를 구현하는 타입 등을 포함해서) WCF 서비스를 정의하는 인메모리 구조(in-memory structure)이다. ServiceDescription은 메타데이터, 코드/구성(code/config), 채널을 생성하기 위해 사용된다. ServiceDescription 개체를 직접 작성할 수 있으며, 특정 특성을 타입에 지정해서 이 객체를 생성할 수도 있다. 이 타입의 코드를 직접 작성하거나 SvcUtil.exe라는 WCF 툴을 사용해 WSDL 문서로부터 생성할 수도 있다.


7. ChannelDescription 클래스


마찬가지로 클라이언트 측의 경우, ChannelDescription은 특정 엔드포인트에 대한 WCF 클라이언트의 채널을 정의한다. ChannelDescription 클래스에는 IChannelBehavior의 컬랙션이 포함되는데, 이것은 채널에 동작을 적용한다. ChannelDescription 클래스에는 (ServiceDescription과 달리) 채널이 통신할 대상 엔드포인트인 ServiceEndpoint가 반드시 단 하나만 포함되어야 한다.

 


8. WCF 런타임

WCF 런타임(Runtime)은 메시지를 보내고 받는 역할을 담당하는 객체들의 집합이다. 예를 들어 메시지를 포맷하고 보안을 적용하는 작업, 메시지를 전송하고 받는 작업, 메시지를 적절한 오퍼레이션으로 보내는 작업 등이 모두 WCF 런타임 내에서 처리된다. 다음은 WCF 런타임의 핵심 개념이다.

    8.1 Message

       WCF Message는 클라이언트와 엔드포인트 사이에 데이터를 교환하는 단위이다. Message는 근본적으로 SOAP 메시지 InfoSet의 인메모리(in-memory) 표현 형태이다. Message는 단지 텍스트 XML에 국한되지 않으며, 사용되는 인코딩 메커니즘에 따라 WCF 바이너리 포맷, 테스트 XML, 혹은 다른 모든 커스텀 포맷을 사용해 직렬화될 수 있다.

     8.2 채널

        채널은 엔드포인트와 메시지를 보내고 받기 위한 핵심 추상이다. 크게 보아서 채널은 두 가지 형태로 구별된다. ①전송포트 채널(Transport Channel)은 TCP, UDP, MSMQ 등의 전송 프로토콜을 사용해 8비트 스트림(opaque octet stream)을 보내거나 받는 작업을 처리한다. ②프로토콜 채널(Protocol Channel)은 메시지를 처리하고 수정하는 SOAP 기반 프로토콜을 구현한다. 예를 들어 보안 채널은 SOAP 메시지 헤더를 추가하고 처리하며 암호화를 통해 메시지의 바디를 수정하기도 한다. 채널을 겹겹이 쌓아올리는 등의 여러 채널을 조합할 수 있다.

    8.3 EndpointListener 클래스

        EndpointListener 클래스는 런타임에서 ServiceEndpoint와 동일한 역할을 한다. ServiceEndpoint의 ①EndpointAddress, ②Contract, ③Binding은 각각 EndpointListener의 ①주소, ②메시지 필터링 및 디스패치, ③채널 스택에 해당한다. 채널 스택은 메시지를 보내고 받는 역할을 담당한다.

    8.4 ServiceHost 클래스와 ChannelFactory 클래스

       

        WCF 서비스 런타임은 ServiceHost.Open을 호출함으로써 실행된다. ServiceHost는 서비스 타입에 따라 ServiceDescription을 생성하고 ServiceDescription의 ServiceEndpoint 컬렉션을 구성설정 파일이나 코드, 혹은 둘 모두에 정의되어 있는 엔드포인트로 채운다. 그런 다음 ServiceHost는 ServiceDescription을 사용해 ServiceDescription 내의 각 ServiceEndpoint에 대한 EndpointListener 객체 형태로 채널 스택을 생성한다.

        마찬가지로 클라이언트 측의 경우, ChannelFactory에 의해 클라이언트 런타임이 생성된다. 이 ChannelFactory는 클라이언트 측에서 ServiceHost의 역할을 담당한다. ChannelFactory는 EndpointAddress, 바인딩, 계약 타입에 기초해서 ChannelDescription을 생성한다. 그런 다음 이 ChannelDescription을 사용해 클라이언트의 채널 스택을 생성한다.

        서비스 런타임과는 달리, 클라이언트 런타임은 EndpointListener를 포함하지 않는다. 왜냐하면 클라이언트는 항상 직접 서비스에 연결하면서 초기화되므로 연결을 기다릴 필요가 없기 때문이다.

[참조 Url: http://cafe.naver.com/techvernunft.cafe ··· eid%3D73 ]

크리에이티브 커먼즈 라이센스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

Posted by jongkok4

2009/08/25 16:40 2009/08/25 16:40
Tag
WCF
Response
No Trackback , No Comment

Trackback URL : http://jongkok4.net/trackback/153

Leave a comment
« Previous : 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : ... 149 : Next »

Search

Tagclouds

  • ADO.net
  • Effective c#
  • pattern
  • 패턴
  • MVC
  • Remoting
  • C# 2.0
  • Thread 동기화
  • Thread
  • 닷넷
  • .net
  • patterns and Practices
  • 디버그
  • API
  • c#
  • delegate
  • HL7
  • 배포
  • 플로우차트
  • WCF

Announcements

  1. [Profile]
  2. My blog was born again.

Categories

  • What's your interest (149)
    • Enhance your ability(IT) (129)
      • OS (2)
      • Software (6)
      • Hardware (3)
      • Hardware Programing (1)
      • C# (45)
      • ADO.NET (17)
      • C++ (4)
      • JAVA (6)
      • ASP.net (0)
      • Remoting (4)
      • Network (3)
      • Visual Studio 2005 (5)
      • .NET (7)
      • Debug (2)
      • WCF (2)
      • WPF (0)
      • DataBase (3)
      • Mobile (1)
      • Tettertools (1)
      • 의료정보 (2)
      • Tip (3)
      • Pattern (6)
      • 디버깅 (1)
      • 잡담 (2)
      • 개념 (2)
      • 자료구조&알고리즘 (1)
    • Enhance your ability(BT) (0)
      • BioInformatic (0)
    • Enjoy Yourself (4)
      • My Life (2)
      • AV(Audio&Visual) (1)
      • iPhone (1)
    • Terms (1)
      • IT Terms (1)
      • BT Terms (0)
    • Concept (7)
    • 방법론 (2)
    • Develop Process (6)

Recent Entries

  1. 아이폰 개발 - 개발자 등록 및 프로젝트 설정
  2. [펌]P2P 프로그램이 사용하는 네트워크 포트
  3. [펌]프로그래머십니까? Unicode,ASCII, UTF-8, euc...
  4. [펌]프로젝트산출물
  5. [펌]WCF 아키텍처 개요 - WCF 클래스 계층구조를...

Recent Comments or Replies

  1. 좋은 글입니다 링크 해도 되죠 ? ㅋ 야매코더 03/04
  2. 잘 보고 갑니다!! 최익필 02/23
  3. 참 이해하기 쉽게 잘 쓰셨네요 많은 도움 되었습니... jin 01/27
  4. RTT: Round Trip Time 쟌나비 2009
  5. 좋은글이네요. 퍼가요~ 이승후 2009

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

  1. C# 기본적인 연동법
  2. c#에 대한 정보, 알고리즘
  3. in지식 && Out지혜
  4. ISCUBIX.COM
  5. J.PARKER'S HAPPY LIFE
  6. Javachobostudy
  7. KAISTIZEN
  8. 딸기맛쵸코바♥
  9. 서진호의 모바일/임베디드 이야기

Site Stats

Total hits:
95452
Today:
122
Yesterday:
96
Subscribe to RSS articles

Powered by TEXTCUBE. Original Source by 1up. Colorize and Fixed by nani.