아디봉의.net
WCF Endpoint 본문
Endpoint (Contract, Binding, Address)
WCF는 기존의 분산 기술들의 단점을 보안해서 하나의 통일된 서비스로 제공하고있다. WCF는 통일성, 상호운영성, 서비스 지향이라는 특징을 가지고 있다. 그중에서 상호 운용성은 web service확장 스팩인 WS-*를 지원함으로서 유연한 서비스를 제공 할 수 있게 해준다.
WS-*이란?
웹서비스 확장 프로토콜을 의미 또한 WSE(web service Enhancements)는 웹서비스 확장 스팩을 쉽게 구현 할수 있게 지원해주는 visual studio.net의 추가로 add in된 툴이다.
웹서비스의 한계는 서버로 자신의 아이디와 비밀번호를 보내는 도중에 네트워크 패킷에 의해서 이정보가 노출될 수 가 있다. 그렇기 떄문에 암호화된 웹통신이 필요하게 된것이며, 그래서 https로 시작하는 ssl보안을 적용해서 웹페이지를 구현하게 된다.
그럼 웹서비스도 이런 ssl을 이용해서 암호화하면 되는것이 아닌가?라고 생각할수있다. 하지만 ssl을 도입하는 순간 웹서비스의 장점인 상호운용성의 장점이 무용지물이 된다.
그렇기 때문에 ws-*프로토콜이 정의되었고, WSE(web services enhancements)라는 웹서비스 확장 스팩이 탄생하게됨
Contract(계약) - 무엇을 가지고 통신을 할것인지 정의하는 뜻을 말함
service Contract - 인터페이스로 service contract로 정의되며 이것을 통해서 메서드가 정의된다.
operationContract는 서비스안에서 동작하는 기능을 정의하게된다. 인터페이스로 만드는 이유는 서비스를 제공할때 내부적인 코드를 감추고, 뼈대만 노출 시킬 수 있기 때문이다.
IsInitiating |
처음 인스턴스가 만들어 질떄만 호출할 수 있게 설정하는지 여부 |
IsTerminating |
메서드 기능을 실행후에객체를 소멸할지 여부 |
IsInitiating |
처음 인스턴스가 만들어 질 때만 호출할 수 있게 설정하는지의 여부 |
IsInitiating |
처음 인스턴스가 만들어 질 때만 호출할 수 있게 설정하는지의 여부 |
IsTerminating |
메서드 기능을 실행 후에 객체를 소멸할지의 여부 |
IsInitiating |
처음 인스턴스가 만들어 질 때만 호출할 수 있게 설정하는지의 여부 |
IsTerminating |
메서드 기능을 실행 후에 객체를 소멸할지의 여부 |
IsInitiating |
처음 인스턴스가 만들어 질 때만 호출할 수 있게 설정하는지의 여부 |
IsTerminating |
메서드 기능을 실행 후에 객체를 소멸할지의 여부 |
data Contract - 데이터 구조에 대한 계약이다.
message Contract - SOAP메세지으 구조를 정의한다.
SOAP의 Header와 Body의 구조를 Message Contract로 정의 할 수 있다는 것이다.
단순히 Attribute의 선언만으로 SOAP의 구조를 쉽게 정의할 수 있게 된 것이다. 또한 MessageHeader Attribute에서는 Actor, IsReferenceParameter, MustUnderstand, Name, Namespace, Relay 와 같은 속성들을 통해서 메시지의 구조나 이름, 기타 기능 등을 설정할 수 있다.
Binding(How)? 어떻게 메시지를 주고 받을지에 대한 정의
바인딩의 요소로는 운반, 인코딩, 신뢰도, 프로토콜이 존재한다. 즉, 이러한 요소들을 어떻게 정의하느냐에 따라서 각각 성향이 다른 Binding이 만들어 지게 되는 것이다.
다양한 바인딩중에 자신이 원하는 속성대로 선택해서 서비스가 가능하며, 바인딩은 크게 standard binging와 custom binding 이렇게 두개의 바인딩으로 나눌수 있다.
standard binding
standard 바인딩은 바인딩의 여러 요소들을 다양하게 조합하여 미리 정의 해놓은것이다.
각 바인딩별로 상호 운용서부터 보안, 세션, 이기종 통신등의 지원 여부를 보여주고 있다.
basicHttpBinding - 아주기본적인 웹서비스 정도로 생각하면된다.
WsHttpBindging, WsDualHttpBinding - Ws-*프로토콜을 이용하며 보안이나 신뢰도 있는 메시지를 쉽게 구현할 수 있다.
WsDualHttpBinding - Duplex기능을지원하고 있다.
NetTcpBinding, NetNamedpipesBinding,
NetMsmqBinding, NetPeerTcpBinding은 닷넷끼리만 통신이 가능한 서비스이다.
<endpoint contract="IMyService" binding="wsHttpBinding"/>
custom Binding
Custom Binding 을 구현하기 위해서는 분산 통신에 대한 완벽한 이해가 있어야함
ADDRESS(where)?
address는 서비스를 제공해주는 주소이다. address는 URI(Uniform Resource Identifier) 의 형태로 구현된다.