게시판 본문 COM / COM+ by VB 6.0 - Read Only

re: COM 개발시 Property Get 과 Let에 관해 알려주세요..
작성자: 송원석
작성일시: 2004-05-08 18:21,  조회수: 3,211
안녕하세요? 송원석입니다. ^_^

먼저 지금부터 제가 말씀드리는 내용들은 실제로 우기님이 사용하시는 코드의 전문을 보고 말씀드리는 것이 아니기 때문에 우기님의 상황과 완벽하게 일치하는 답변이 아닐 수도 있다는 점을 염두에 두시기 바랍니다.

먼저 우기님의 말씀을 종합해본다면 IObjectControl 인터페이스를 구현하기 전까지는 정상적으로 이루어지던 프로퍼티값의 입출력이 이 인터페이스를 구현한 뒤에는 원하는 대로 이루어지지 않고 빈 값만 출력된다는 말씀이시죠? 그렇다면 이것은 우기님께서 IObjectControl 인터페이스와 관련된 모든 구현을 정확하게 코딩하셨고 COM+ 의 설정을 올바르게 하셨다는 전제하에 지극히 정상적으로 동작하고 있는 것입니다. ^_^

이 상황을 이해하시기 위해서는 먼저 IObjectControl 인터페이스가 壕?활성화를 구현하기 위한 인터페이스라는 점을 이해하셔야만 합니다. 그러나 COM+ 로부터 제공되는 서비스인 적시 활성화 하나만 가지고서도 책의 한 단원 정도 분량의 설명이 필요하기 때문에 일단 이 자리에서는 간단한 개념만 설명드리도록 하겠습니다. 아무튼 컴포넌트에 적시 활성화를 구현하였고 COM+ 의 설정에 적시 활성화를 사용한다고 명시되어있는 컴포넌트는 다음과 같은 특성을 갖게 됩니다.

먼저 해당 컴포넌트에 A 라는 메소드와 B 라는 메소드가 있다고 가정해 보도록 하겠습니다. 일반적인 컴포넌트라면 컴포넌트의 인스턴스를 만든 다음 A 라는 메소드를 호출하고 다시 B 라는 메소드를 호출한 다음 컴포넌트의 인스턴스를 해제할 때까지 해당 컴포넌트의 인스턴스가 그대로 유지됩니다. 이는 너무나 당연한 얘기죠. 그러나 만약 이 컴포넌트가 적시 활성화를 구현하고 있다면 사정은 달라집니다. 컴포넌트의 인스턴스가 생성되고 A 메소드가 호출된 다음 이 A 메소드에서 아무런 오류도 발생하지 않은 경우 컴포넌트를 사용하는 클라이언트측에는 아직 컴포넌트가 살아 있는 것처럼 보이지만 실제로는 컨텍스트만 남겨진채 컴포넌트의 인스턴스가 삭제됩니다. 그리고 B 메소드를 호출하면 그 시점에서 다시 컴포넌트를 새로 만들어 버립니다. 물론 이 경우에도 클라이너트 측에서는 눈치를 챌 수가 없고 만약 개체 풀링까지 구현된 컴포넌트라면 컴포넌트가 삭제될 때 진짜로 삭제되는 것이 아니라 풀에 들어갔다가 다시 나오게 됩니다. 이런식으로 동작을 하기 때문에 이 서비스의 이름이 바로 적시 활성화인 것이죠. ^_^

이렇기 때문에 COM+ 의 컴포넌트는 프로퍼티에 저장된 값을 잃어버리게 되는 것이고 그래서 COM+ 에 사용될 컴포넌트는 상태를 유지하면 안된다는 말이 나오는 것이구요. 게다가 한 가지 치명적인 사실은 COM+ 서비스의 자동 트랜젝션 서비스를 사용하는 컴포넌트는 적시 활성화의 구현이 강제된다는 사실입니다. 이는 트랜젝션의 원자성을 더욱 확실히 하기 위한 방편으로 예외가 존재하지 않습니다. 그리고 비주얼 베이직을 사용하는 경우에는 개체 풀링을 지원하는 컴포넌트는 생성할 수 없다는 점도 참고하시기 바랍니다.

따라서 문제를 해결하시기 위해서는 적시 활성화를 사용하지 않으시거나 그럼에도 불구하고 프로퍼티의 값을 유지하시고 싶다면 COM+ 의 또 다른 서비스인 SPM (Shared Property Manager) 을 구현하셔야만 합니다. 그러나 방금 전에도 말씀을 드렸지만 만약 컴포넌트가 자동 트랜젝션 서비스를 사용하고 있다면 적시 활성화는 반드시 사용하셔야만 합니다.

감사합니다.

IP 주소: 211.216.128.76
전체 276 건의 게시물, 12 페이지로 구성된 COM / COM+ by VB 6.0 게시판의 10 페이지입니다.
게시물
51

뉴스그룹에서 재미난 방법을 찾았습니다. [1]

zziuni

2004-10-20 6,243
50

이벤트 오류

홍완식

2004-08-21 3,209
49

re: 이벤트 오류

송원석

2004-08-21 3,199
48

트랜잭션 오류 문제

홍완식

2004-08-17 8,621
47

re: 트랜잭션 오류 문제

송원석

2004-08-18 3,725
46

해결방법 [1]

홍완식

2004-08-19 834
45

프로그램 배포

정보문

2004-07-29 3,111
44

re: 프로그램 배포

송원석

2004-07-29 2,931
43

아...3년전의 VB경험으로...서비스할 DLL을 만들라니...

권민수

2004-05-21 3,745
42

re: 아...3년전의 VB경험으로...서비스할 DLL을 만들라니...

송원석

2004-05-22 3,128
41

re: 아...3년전의 VB경험으로...서비스할 DLL을 만들라니...

권민수

2004-05-22 2,949
40

COM 개발시 Property Get 과 Let에 관해 알려주세요..

우기

2004-05-08 776

re: COM 개발시 Property Get 과 Let에 관해 알려주세요..

송원석

2004-05-08 3,211
38

송원석님 답변 정말 감사합니다.. 저에게는 재미있는(?) 일이기에 다시 글 올립니다. ^^*

우기

2004-05-08 769
37

re: 송원석님 답변 정말 감사합니다.. 저에게는 재미있는(?) 일이기에 다시 글 올립니다. ^^*

송원석

2004-05-08 3,251
36

따끔한 충고의말 정말 감사합니다. ^^ [1]

우기

2004-05-08 784
35

RDS 이용한 VBScript 문제입니다.

윤경민

2004-02-26 785
34

re: RDS 이용한 VBScript 문제입니다.

송원석

2004-02-26 3,227
33

[질문]com+ 프락시 사용 클라이언트 에러 발생!

궁금이

2004-02-01 982
32

re: [질문]com+ 프락시 사용 클라이언트 에러 발생!

송원석

2004-02-02 3,284
31

re: [질문]com+ 프락시 사용 클라이언트 에러 발생!

궁금이

2004-02-02 919
30

re: [질문]com+ 프락시 사용 클라이언트 에러 발생!

송원석

2004-02-02 3,098
29

RDS를 사용하여 사원인증을 쿼리하려고 하는데...

saint74

2003-11-03 3,496
28

re: RDS를 사용하여 사원인증을 쿼리하려고 하는데...

송원석

2003-11-03 3,512
27

감사합니다. 상세 구현 예상 방법입니다..

saint74

2003-11-04 3,439