2. 인피니트 닷넷교육 1일차 – 닷넷 소개, C#특징 2일차 – UI 기술 WPF, Expression Blend 소개 3일차 – 닷넷 분산 통신기술의 소개 4일차 – 프로젝트 설계 및 팀시스템, 유닛테스팅 5일차 – C# 3.0과 C#4.0 추가된 문법 살펴보기
3. 강사소개 현) 캠든소프트 대표이사 국내 닷넷 최대 커뮤니티 “HOONS닷넷” 운영자국제 닷넷 연합 그룹회 한국 유저그룹 리더 전) 2002~2010 소프트웨어 엔지니어로 활동 2005년 마이크로소프트 최연소 MVP수상 2005~2010년 마이크로소프트 Visual C# MVP 10여권의 IT개발 서적 집필 및 번역 KBS 미래를 짊어질 젊은 주역 60명 선정
10. 로컬 트랜잭션 vs 분산 트랜잭션 Client Server Accounts ADO.NET Account A Local Transaction Account B OLE DB SQL TDS Client Component A Component B DCOM TXID=1234 TXID=1234 Distributed Transaction Coordinating DTC Participating DTC TM Protocol Account A Account B TXID=1234 TXID=1234 Server A Server B
11. COM+ 처리 예제 코드 [Transaction(TransactionOption.Required)] class A : ServicedComponent { [AutoComplete] public void foo() { B obj = new B(); try { obj.TransactionTest(); } finally { obj.Dispose(); } } } [Transaction(TransactionOption.Supported)] class B : ServicedComponent { [AutoComplete] public void TransactionTest() { // 데이터베이스 액세스 코드} }
12. 닷넷리모팅 서비스 프로토콜 분산 어플리케이션을 위한 기반 다른 프로세스/장비간 통신 DCOM 을 대체한다.
25. 통합된 서비스 모델 .NET Remoting ASMX 다른 플랫폼과의 상호운용성 닷넷 고유의 원격 객체 호출 기술 Attribute- 기반의 프로그래밍 Message- 기반의 프로그래밍 WS-* Protocol 지원 Enterprise Services System.Messaging WSE
27. A B C A B C A B C EndPoint Caller Service Message Address Binding Contract (Where) (How) (What)
28. Transport Encoder Protocol(s) Transport Encoder Protocol(s) EndPoint Service Contract andBehaviors Client Dispatcher Binding Address
29. CLR to Contract Types WSDL CLR Service Contract CLR XML Schema Data Contract CLR SOAP Message Contract
30. Binding (How?) Transport Http, TCP, Named Pipes, MSMQ Encoding Text, Binary, MTOM Protocol Security, Transaction, Reliability
31. Binding (How?) N = None | T = Transport | M = Message | B = Both | RS = Reliable Sessions
32. Address (Where?) Address는 서비스를 제공하는 주소의 역할 Address는 URI(Uniform Resource Identifier)의 형태 http://www.x.com:80/Service/MyEndPoint net.tcp://www.x.com:8080/Service/MyEndPoint net.pipe://www.x.com/Service/MyEndPoint net.msmq://www.x.com/MyQueue
33. Hosting IIS Hosting Windows Service Windows Activation Service (WAS) 윈도우 활성화 서비스가 실행되고있는 상태에서 WCF 응용 프로그램이 자동으로 활성화되고 서비스 실행 Self Hosting ServiceHost class
35. WCF의 메시지 전달 유형 Simplex (One-Way) : 단 방향통신으로 특정 로그를 쌓거나 할 경우 간단한 작업에 적합(One Way) Request-Reply : 동기 양방향 통신 방식으로 특정한 메시지를 보내고 전달 받는 방식 Duplex : 비 동기 양방향 통신 방식으로 특정한 메시지를 원격으로 보내고 전달 받는 방식
43. WCF의 인스턴스의 관리 Per-Call: 메서드가 호출됨에 동시에 인스턴스 개체가 제거됨- 일반적인 웹 서비스와 유사함, 기본 자원효율 우수함- COM+의 JIT방식 .NET Remoting의 Well-Known SingleCall과 유사 Per-Session: 기본적으로 세션이 지원됨(Default Value) - 클라이언트에서 파괴해야 개체가 제거됨 - 신뢰할 수 있는 전송 세션에서 지원하는 바인딩 SingleCall: 하나의 인스턴스만 생성됨 - 한 번에 하나의 클라이언트 호출만 실행할 수 있는 동기화 작업이 필요함- 자유롭게 인스턴스 초기화 가능
44. WCF의 인스턴스 관리 유형: PerCall Per-Call: 메서드가 호출됨에 동시에 인스턴스 생성되고 제고됨 - 일반적인 웹 서비스와 유사함, 기본 자원효율 우수함- COM+의 JIT방식 .NET Remoting의 Well-Known SingleCall과 유사
45. WCF의 인스턴스 관리 유형: PerSession Per-Session: 기본적으로 세션이 지원됨(Default Value) - 클라이언트에서 파괴해야 개체가 제거됨- 신뢰할 수 있는 전송 세션에서 지원하는 바인딩
46. WCF의 인스턴스 관리 유형: SingleCall SingleCall: 하나의 인스턴스만 생성됨 - 한 번에 하나의 클라이언트 호출만 실행할 수 있는 동기화 작업이 필요함- 자유롭게 인스턴스 초기화 가능
49. 요구사항 설정: 채팅 서비스 채팅 서비스는 별도의 응용 프로그램으로 관리 된다. 닷넷끼리만 통신을 하기 때문에 상호 운용성은 고려하지 않아도 된다. TCP 통신을 이용하기 원한다. 단순한 Request-Reply가 아닌 메시지를 클라이언트에서 서버로 서버에서 클라이언트로 전송 할 수 있어야 한다. 채팅은 연결 지향적이기 때문에 사용자의 인스턴스가 관리되어야 한다.
50. 채팅 서비스 요소 분석 #1 (Hosting) 채팅 서비스는 별도의 응용 프로그램으로 관리 된다. IIS Hosting Self Hosting
51. 채팅 서비스 요소 분석 #2 (Binding) 클라이언트들은 모두 닷넷 환경이다. 단순한 Request-Reply가 아닌 메시지를 클라이언트에서 서버로 서버에서 클라이언트로 비 동기 전달 되어야 한다. 로컬이 아니기 때문에 TCP 통신을 이용해야 한다.
52. 채팅 서비스 요소 분석 #2 (Binding) 클라이언트들은 모두 닷넷 환경이다. 단순한 Request-Reply가 아닌 메시지를 클라이언트에서 서버로 서버에서 클라이언트로 비 동기 전달 되어야 한다. 로컬이 아니기 때문에 TCP 통신을 이용해야 한다.
53. - PerSession 채팅 서비스 요소 분석 #3 (Instance) 채팅은 연결 지향적이기 때문에 사용자의 인스턴스가 관리되어야 한다. PerSession or PerCall or SingleCall
57. Endpoint Endpoint Endpoint Endpoint Endpoint 서버 전체 통신구조 Sync Service Data Service Control Server Client Application Sync Service DBService Player Cast Server External Device Client Application RS-232C Camera & External Device IConsole DBService Socket Socket Endpoint Endpoint Endpoint Endpoint Endpoint DB
58. 서버 전체 통신구조 Sync Service 기존 TCP 소켓 통신을 대체함 연결 지향적으로 실시간으로 데이터를 처리함 Data Service 기존 웹 서비스 통신을 대체함 비연결 지향적으로 DataBase관련 내용을 처리함
59. Endpoint Endpoint Endpoint Endpoint Endpoint 서버 전체 통신구조 Player WCFService WCFService Sync Service ControlServer Console Data Service Endpoint Endpoint Endpoint DB
60. 서비스 프로그램들의 소개 Control Server Client Application Sync Service DBService IConsole과 Player간의 통신을 지원하고 외부 장비와의 통신 또한 제공한다. Socket을 이용하여 Sync 서비스와 장비와의 데이터 전달을 중개한다. Windows Service External Device Client Application Dll for Device DBService For Linux 사이트 별로 다른 장비가 설치되기 때문에 통신 프로토콜이 일정하지 않기 때문에 별도의 DLL로 분리하여 관리한다. (e.g) sungjin.dll, eunsung.dll DB의 정보를 교환하기 위한서비스로 Linux용으로는 별도의 서비스를 제공한다.
61. Sync Service – #1. 소개 Client Application Player Sync Service External Device Client Application Camera IConsole 주로 IConsole에서 Player를 조정하기 위한 메시지를 중개하는 서비스로 사용된다. 특정 카메라에 고화질 영상과 같은 요청을 위해서 Camera쪽에 메시지를 전달하기도 한다. External Device 서비스의 경우 각각의 장비 별로 달라지게 되는 통신 모듈을 별도의 로직으로 분리하기 위해서 분리해 놓았다.
62. Sync Service - #2. 구현 WCF 서비스를 이용한 TCP기반의서비스- Address: net.tcp://서버주소:20000/CS- Binding: netTcpBinding- Contract: InnotiveCSClassLib- Hosting: Windows Service 관련 프로젝트 파일- InnotiveCSClassLib: 계약 인터페이스 & 실제 동작을 위한 DLL- InnotiveControlServerWindowsService: 윈도우 서비스에 등록하여 호스팅하기 위한 프로젝트- InnotiveControlServerSetup: 윈도우 서비스를 간편하게 설치할 수 있게 해주는 셋업 프로젝트 설치되는 경로- C:rogram FilesnnotivennotiveControlServer
63. Sync Service – #3. 설치 & 서비스 셋업 프로그램 설치 Windows Service ->InnotiveControlServer->시작
64. Data Service- #1. 소개 Data Service Innotive Framework Stored Procedure Player IConsole Payer나 Iconsole의 동작에 필요한 여러가지 정보들을 주고 받기 위한 데이터 서비스 DB
65. Data Service - #2. 구현 WCF 서비스를 이용한 HTTT기반의서비스(웹 서비스)- Address: http://서버주소:15777 - Binding: basicHTTPBinding- Contract: IService- Hosting: IIS7 관련 프로젝트 파일- http://localhost:15777 : 서비스 메시지들의 인터페이스들이 정의되어 있고 메시지들을 구현하고 있다. - InnotiveFramework: 실제 DB와 통신하는 로직과 에러&호출에 대한 로그를 정의하고 있다.
66. TCP 통신 이슈 소켓 연결 유지를 위한 처리서버와 클라이언트 간의 PING 메시지 비동기 메시지를 순차적으로 사용하기 위한 방법큐활용– 스레드 삽질 스토리
67. Endpoint Endpoint Endpoint 스레드 튜닝 초창기 단순한 설계 클라이언트 인스턴스 큐 클라이언트 인스턴스 Player 클라이언트 인스턴스 큐에 담아 스레드1개를 만들어 메시지를 순차적으로 처리한다. TimeOut의 이슈