오후 12:04 2002-03-12
COM+ 컴포넌트 만들기
조경민 ( bro@shinbiro.com ) from 문형석
=================================================

일딴 MTS 서포트 프로젝트를 시작하자
--------------------------------------------------
1. VC에서 ATL 프로젝트를 시작한다.
  (Inproc server dll로 선택한다. MTS에 올리면 MTS가
  알아서 컴포넌트를 격리시켜 Out-Of-Process 컴으로
  돌려준다. - DLLHOST.EXE에 붙어 돌아가게 된다. -
  그리고 Out-Of-Process로 돌아가야 하기때문에 Aggregation
  되게 바꾸는 이유가 된다)
2. Support MTS를 선택한다.

3. ClassView에서 오른클릭 New ATL Object한 후
   MS Transaction Server Component를 선택한다.
   TestMTS라고 이름짓고, Nest 탭에서
   Support IObjectControl과 Can be pooled를 선택한다.
   생성한다.

4. 헤더파일을 바꿔야 한다.
   싱글 스레드 모델을 멀티로 바꾼다.
   (VC 6가 나올당시 NT4.0기반의 MTS하였으나 이제는
   윈도우 2000기반의 COM+의 Netural모델이 생겨이를 쓰는것이다)
class ATL_NO_VTABLE CTestMTS :
        public CComObjectRootEx<CComMultiThreadModel>,        // 멀티로 바꾼당

   또한 Aggregation을 안한다에서 한다로 바꾼다.
//DECLARE_NOT_AGGREGATABLE(CTestMTS)        // 바뀌었다.
DECLARE_AGGREGATABLE(CTestMTS)

   Resource Files에서 TestMTS.rgs에 보면 스레딩 모델이 있는데
   역시 아래처럼 바꾼다.  
                        val ThreadingModel = s 'Neutral'

      
이젠 MTS 기능을 넣자
--------------------------------------------------------
아래 세 기본적인 MTS 서포트 함수가 미리 제공되는데 하는일을
이해한후 넣는다.

HRESULT CTestMTS::Activate()
{
        HRESULT hr = GetObjectContext(&m_spObjectContext);
        // 이부분에다가 맴버변수,로직의 초기화를 넣는다.


        if (SUCCEEDED(hr))
                return S_OK;
        
        return hr;
}

BOOL CTestMTS::CanBePooled()
{
        // 클라이언트에서 TestMTS를 다 쓰고 Set Nothing시킬때
        // 호출되는데 아직 Deactivate가 다 끝나지 않았다면
        // 좀더 기다리라고 FALSE를 리턴해야 할것이다.
        return TRUE;
}

void CTestMTS::Deactivate()
{
        // 초기화했던거 다 릴리즈 해준다.
        m_spObjectContext.Release();
}

내 ATLCOM 메소드를 추가한다.

이젠 MTS에 올려넣자
------------------------------------------------------------
시작->프로그램->관리도구->구성요소 서비스 로 MTS를 실행시킨다.
콘솔루트->구성요소서비스->컴퓨터->내컴퓨터->COM+응용 프로그램에서
오른클릭 새로만들기 응용프로그램 한 후 빈 응용 문서 패키지를
만든다. 이름은 아싸패키지
그리고 패키지안의 구성요소에서 오른클릭 추가해서 새 구성요소를
설치를 선택하여 해당 컴파일한 TestMTS.dll을 로드한다.

패키지의 오른클릭 시스템 종료로 메모리에 올라온 컴포넌트를 내릴수있다.
(재컴파일시 좀 해주어야 한다)

이젠 디버깅이다
------------------------------------------------------------
VC에서 TestMTS프로젝트를 로드한다. 주메뉴->프로젝트세팅에서
디버깅 탭에서
Executable for debug session을
C:\winnt\system32\dllhost.exe를 선택한다.
Program arguments:를
/ProcessID:{FC2A8088-1299-4E28-AFDF-8A757415FA64}
로 선택한다. 프로세스 아이디 뒷부분은
아까 MTS에 아싸패키지 오른클릭 등록정보 고급에 보면
디버깅 섹션에 디버거 경로의 뒷부분을 참고한다.

VC에서 디버깅할 위치에 브레이크포인트를 걸고, F5로 디버깅시작
그럼 VB에서 또는 웹페이지에서 해당 MTS TestMTS객체를 호출할때
VC에서 디버깅 브레이크가 되어서 디버깅할 수있다.

이젠 분산 DCOM이다
------------------------------------------------------------
MTS에서 아싸패키지 오른클릭 내보내기를 한 후
내보내기 설치MSI이름을 정해준 후 프록시 패키지로 선택한 후
종료하면 MSI가 생긴다. 이를 다른 컴터에 깔면 된다.
(같은 MTS 서버가 깔린 컴터여야 한다)
그리고 그 컴퓨터 사용자가 내 MTS 컴포넌트를 쓰려면 사용자계정을
갖아야 한다.
아싸패키지 역활에서 오른클릭 새 역활 후 '같이쓰자' 만든후
사용자를 새로 만들어 해당 사용자를 추가하면 된다.

MTS컴포넌트서버                  클라이언트
--------------                   -----------
TestMTS.dll풀링  <-- DCOM 호출 -- Proxy

'KB > tutorial' 카테고리의 다른 글

snmp 프로그래밍  (0) 2004.03.19
MSN 프로그래밍 하기  (0) 2004.03.19
MFC DLL 간단 설명  (0) 2004.03.19
MySQL 에서 Text file Import 하기.doc  (0) 2004.03.19
MSSQL 데이터 MySQL로 Migration하기  (0) 2004.03.19

+ Recent posts