-
[WCF] 2. WCF 개념.NET/개념 및 유용한 팁 2015. 3. 28. 17:32반응형
WCF는 .NET Core 및 새로운 .NET 에서 소개하는 gRPC로 대체되었습니다. 유지보수 외 신규 개발에선 추천하지 않습니다.
참조 : https://docs.microsoft.com/ko-kr/aspnet/core/grpc/why-migrate-wcf-to-dotnet-grpc?view=aspnetcore-5.0#grpc-as-a-migration-path-for-wcf-to-net-core-and-net-5WCF의 핵심적인 요소는 크게 주소(Address), 바인딩(Binding), 계약(Contract)으로 구성된다. 그리고 이 3가지를 통틀어 서비스 끝점(Service EndPoint)이라고 한다.
1. 주소(Address) : 웹 브라우저에서 흔히 볼 수 있는 URL을 의미하며. Helloworld 예제에서 서비스를 열때 사용한 url인http://localhost/wcf/ 가 바로 주소(Address)이다.
ServiceHost host = new ServiceHost(typeof(WCFService), new Uri("http://localhost/wcf/")); // 클라이언트가 서비스에 접근하게 할 Base 주소
주소(Address)는 사용하고자 하는 통신 프로토콜에 따라 접두어를 바꿔야 한다.
Http 프로토콜을 사용하고자 하는 경우,
http://[주소]Net.tcp 프로토콜을 사용하고자 하는 경우,
net.tcp://[주소]
프로토콜은 기본적으로 사용하는 포트번호가 있다. 예를 들어, http는 80번 포트를 사용하며, https는 443, net.tcp는 808을 사용한다. 만일, 포트번호 변경이 필요하다면(예컨데, WCF 서비스를 열어야 할 PC가 http를 사용하는 웹 서버인 경우) 주소뒤에 :[포트번호] 를 작성해주면 된다.
예) http://localhost:999/wcf/ -> 999포트번호를 사용하는 WCF 서비스 주소
2. 바인딩(Binding) : WCF 서비스에 대한 통신 프로토콜, 암호화여부, 제한시간, 데이터 포맷등을 설정한다. Helloworld예제에서 new BasicHttpBinding()가 바인딩(Binding) 이다.
.NET WCF 라이브러리에서 제공하는 바인딩(Binding)은 Binding 클래스로부터 프로토콜 및 데이터 포맷등에 따라 파생된 Binding 클래스를 사용한다. 예를 들어, Http 프로토콜을 사용한다면 BasicHttpBinding, net.tcp 프로토콜을 사용하고자 한다면, NetTcpBinding, 서비스/클라이언트간 Http로 양방향 통신이 필요하다면 WSDualHttpBinding 바인딩 서비스를 사용해야 한다.
3. 계약(Contract) : 서비스가 제공하는 기능을 의미한다. Helloworld 예제에서 IWCFService 인터페이스가 계약(Contract)이며, 인터페이스를 구현한 클래스를 ServiceHost에 등록하고, 주소와 바인딩을 통해 인터페이스를 클라이언트에 제공함으로서, 클라이언트가 WCF 서비스 프로그램에 구현된 기능을 사용하도록 한다.
[ServiceContract] interface IWCFService // 계약(Contract) 원형 { [OperationContract] string sayHi(); } class WCFService : IWCFService // 구현된 계약(Contract) { public string sayHi() { return "Hello WCF!"; } }
참조 : http://taeyo.net/columns/View.aspx?SEQ=331&PSEQ=23&IDX=4
참조2 : https://msdn.microsoft.com/ko-kr/library/vstudio/ms733107(v=vs.100).aspx
반응형'.NET > 개념 및 유용한 팁' 카테고리의 다른 글
[Async/Await] Invoke보다 간편하게 UI 접근하기 (2) 2019.12.19 [WCF] 3. 이중계약으로 콜백기능 구현하기 (0) 2015.04.05 [WCF] 1. Helloworld (2) 2015.02.18 [ADO.NET] DSN없이 ODBC 연결로 DB에 대한 Table 정보 가져오기 (0) 2015.02.07 [Invoke & BeginInvoke] 1. 다른 Thread 에서 UI 접근하기 (2) (0) 2015.01.12