- Windows Communication Foundation
- Unified programming model for writing distributed application on the Microsoft platform.
- SDK for developing and deploying services on Windows
-
Creating a service
-
Hosting a service
-
Consuming a service
- wcf는 위으 세가지로 구성된다고 보면 된다.
서비스를 생성하고
빌드 후 실행하면 .net 프레임워크?가 자동으로 웹서비스를 호스팅해준다.
그러면 웹 주소를 통하여 사용하기만 하면 끝이다.
- 서비스 생성은 기본 인터페이스와 인터페이스를 구현하는 클래스로 구성된다.
Interface는 world에 노출되고, class에 구현한 것을 실행한다.
- Service Oriented Architecture
- reusable component on the network
- collection of services on a network that communicate with one another
- Services are well-defined, platform-independent interfaces and reusable
- A web service is a unit of managed code that can be remotely invoked using HTTP
- End Points are alos called as ABCs of services;
- A stands for Address(127.0.0.1)
- B stands for Binding(http, net.tcp, net.pipe, net.msmq)
- C stands for Contract(Interfaces and Methods)
- Server side의 abc와 Client side의 abc가 일치해야 한다
// Server side
<service name="MultipleWcfServiceLibrary.MultipleService" behaviorConfiguration="MyServiceTypeBehaviors">
<endpoint
address="http://localhost:11987/MyMultipleServiceHost.svc"
binding="basicHttpBinding" bindingConfiguration=""
contract="MultipleWcfServiceLibrary.IMultipleService" />
</service>
// Client side
<endpoint
address="http://localhost:11987/MyMultipleServiceHost.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMultipleService"
contract="MultipleServiceReference.IMultipleService" name="BasicHttpBinding_IMultipleService" />
- WCF를 hosting 할 수 있는 방법은 4가지이다.
- 아래의 3가지 방법 중 하나를 사용하여 c#코드를 작성하는 것을 의미
- Console Application
- Windows Form Application
- WPF Application
- To manage the host life cycle i.e., creating and opening an instance of the ServiceHost class to make the service available and closing the instance after use.
- 호스팅을 할 때 생성 오픈 종료 등의 동작을 수동으로 해야한다.(IIS같은 경우는 자동으로 해준다)
- 개발 단계에서 사용. 데이터를 트레이싱 하기 쉽고, 어플리케이션 내부에서 어떤 일이 일어나는지 알 수 있다. 따라서 Debuging이 쉽다.(디버깅 용도?)
- 개발시 콘솔에서 하고 Windows Services로 넘어감
- Protocol : http, net.tcp, net.pipe, net.msmq
- 사용법
- Adding dlls
- Adding references
- Create the ServiceHost
- Adding an End-Point(코드에서 적거나 설정(Web.config)에서)
- Enalbe service metadata behavior
- Open service(Start listening for clients)
- Close service(Stop listening for clients)
- MEX Endpoint(Metadata Exchange) 인간이 읽을 수 있는 방식이 아닌 방식으로 사용?
- svcutil의 기능
- Proxy Class를 만든다
- Microsoft Visual Studio Command Prompt를 관리자 권한으로 실행하고 svcutil net.tcp://localhost:50011/mex /out:"D:MyProxy.cs" /config:"D:MyProxy.config"를 하면 프록시 클래스를 볼 수 있다
-
Microsoft Windows services(=NT services)
- Windows sessions 위에서 동작
- enables to create long-running executable applications
- can be automatically started when the computer boots, can be paused and restarted, and do not show any user interface
- SQL services처럼 한번 실행하면 재부팅을 해도 OS의하여 자동 재실행 및 운영됨
- IIS이외에 WCF service를 장시간 운영할 때 사용
- 장점
- 한번 OS에 의해 운영되고 재시작됨
- 오류 발생시 자동으로 Windows Service Control Manager에 으해 재시작됨
- Secure enviroment
- 단점
- 설치해야 함
-
Protocol : http, net.tcp, net.pipe, net.msmq
- new process activation service that is generalization of IIS features that work with non-HTTP transport protocols
- Such as Tcp, named pipes, and Message Queuing
- 요약하자면 IIS(IIS 7 이상)에서 동작하는 non-HTTP binding을 위한 WCF services 이다.
- 윈도우즈 기능 켜고 끄기
- 인터넷 정보 서비스
- 응용 프로그램 개발 기능
- ASP.NET 4.8
- 윈도우 검색창에서 inetmgr 치면 ISS 관리 패널 나옴
- 접속에 대한 세부 설정
- App.config -> 우클릭 -> Edit WCF Configuration을 통하여 수정 간으
- 코드에서도 수정 가능
- 클라이언트가 service에서 무엇을 할 수 있는 가를 나타냄, capability or feature set
- 메시지 포맷 설정 가능 : json , xml등
- Type of contract
- Service contract : 클라이언트가 service에서 무엇을 할 수 있는 가
- Data contract : 어떤 데이터를 주고 받을지를 결정
- Fault contract : 에러, 얘외 핸들링
- Message contract : 메시지 포맷을 정하여 이기종(interoperability)간의 통신가능하게 함, 거의 사용 X
- 서비스 상속 가능
- 서비스 라이브러리에서 ServiceContract와 OperationContract의 Name을 바꾸는 것
- 서비스에서는 오버로딩을 지원하지 않기 때문에 이를 통하여 메서드 이름을 바꾸어 서비스 한다.
- [ServiceContract(Name="MultiplicationService")]
- [OperationContract(Name ="MulInt")]
- 기본 자료형(int, double, ...)은 자동으로 Serialization 되고 Deserialization된다.
- 하지만 Array 등의 객체는 자동으로 변경되지 않기 때문에 정의가 필요하다.
- 이 정의를 해주는 것이 Data Contract이다.
- WCF에서는 Exception을 Falult라 한다.
- WCF에서는 보안상의 이유로 Exception을 표시하지 않는다
- 하지만 개발 도중에는 표시하는 것이 개발의 편의성 면에서 좋으므로 옵션으로 변경 할 수 있다
- Configuration에서 옵션변경
- App.config 파일에서 behavior에 IncludeExceptionDetailInFaults 옵션을 주거나
- Service Library의 Service 클래스에 [ServiceBehavior(IncludeExceptionDetailInFaults=true]를 붙이면 된다
- .Net의 Exception을 사용하지 않고 WCF의 FalutException class를 사용하면 표시된다
- FalutException
- single logig으로 움직이는 서비스가 있고
- mulpiple session으로 움직이는 서비스도 있다
- session을 지원하는 경우, 각각의 service 호출시 데이터가 기억된다. 하지만 session을 지원하지 않는 경우, 각각 개별 호출로 인식된다.
- Bindings that support sessions by default
- NetTcpBinding
- NetNamedPipeBinding
- WSDualHttpBinding
- Binding that do not support sessions at all
- BasicHttpBinding
- NetPeerTcpBinding
- NetMSMQBinding
- client로부터 호출이 오면 server는 WCF인스턴스를 만든다
- WCF는 3가지 방법으로 인스턴스를 만든다
- Per call(One for each call from any client)
- least memory useage?
- [ServiceBehavior(InstanceContextMode = InstanceContextMode.Percall)]
- Per session(One for each client)
- [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
- Single instance(Only one for all)
- [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
- 세션을 유지하기 위하여 설정이 필요하다
- ReceivedTimeOut
- IsInitiating : Service Interface의 Method에 설정
- IsTerminating : Service Interface의 Method에 설정
- SessionMode : Service에서 설정
- Request / Reply pattern
- 데이터를 쏘고 답변을 수신
- default
- client는 응답 메시지를 수신할 때까지 중지(기본)
- client는 비동기(asynchronously)적으로 동작 할지 선택 가능
- One-way / Simplex / Datagram
- client에서 service로 데이터를 쏘기만 한다
- udp랑 비슷
- service가 죽어도 client는 알 수 없다
- 기본적으로 모든 메소드가 void이다
- Duplex / Callback
- Invokes methods in turn