게시판 본문 Active Directory Service Interface - Read Only

re: wmi 관련~~~~
작성자: 송원석
작성일시: 2005-01-12 11:40,  조회수: 3,146
말씀해주신 내용들을 바탕으로 관련된 문서들도 찾아보고 MSDN 에서도 여기저기 찾아봤습니다만, 특별히 관심을 끄는 그럴싸한 해결책은 없는 것 같습니다. 그래서 여러가지로 검토를 해 본 결과 다음과 같은 추정을 하게 되었습니다. 다만 현재 제가 프로젝트에 파견나와 있는 상태라 주변에 접근할 수 있는 DNS 서버가 존재하지 않아서 단지 추정에 의해서 말씀드리는 것이라는 점을 참고하시기 바랍니다. ^_^;;

먼저 코드 자체에는 특별한 문제점이 존재하지 않는다고 생각됩니다. 따라서 환경 설정과 관련된 문제점이 의심되는데요, 가장 먼저 생각해본 것이 권한 관련 문제입니다. 그러나 매번 바뀌기는 하지만 언제나 한 개 이상의 항목들이 리턴된다는 점에서 권한 문제는 아닌 것 같습니다. 그래서 다음과 같은 부분들에 대해서 관심을 가져 봤습니다.
1. Count 프로퍼티에 접근하면 오류가 발생한다. 

2. 매번 리턴되는 결과의 갯수가 틀리다. 
라는 부분이죠. 이런 점들을 감안하여 본다면 다음과 같은 가정이 가능합니다.
1. Count 프로퍼티는 검색된 모든 개체들이 리턴되고 난 뒤에 설정된다.

2. 개체들이 모두 리턴되기 전에 Count 프로퍼티에 접근하면 오류가 발생한다. 

3. 매번 리턴된 갯수가 틀린 것은 실제로 개체들이 그 시점에 모두 리턴되지 않았기 때문이다. 
라는 가정입니다.

그래서 이 가정들을 바탕으로 해당 개체에 대한 설명을 MSDN 에서 찾아 보았습니다. 즉 SWbemObjectSet 개체의 Count 프로퍼티에 대한 설명을 찾아본 것이죠. 해당 문서에 다음과 같이 흥미로운 얘기가 있더군요.
The Count property can be expensive (require a lot of processor time) to retrieve because
complete enumeration by the provider of the elements of the set is required to return the result.

Note : If you attempt to get this property from an SWbemObjectSet object that returned from 
a method where the specified flags included wbemFlagForwardOnly, you will get an
wbemErrFailed error.
대충 정리해보면 이런 얘기입니다.
Count 프로퍼티의 값을 얻는 것은 매우 비용이 많이 드는 작업인데, 왜냐하면 프로바이더가 요구받은 
개체들을 모두 완벽하게 열거하고 난 다음에서야 결과를 리턴해주기 때문이다. 

주의사항 : 만약 wbemFlagForwardOnly 옵션이 설정된 메소드로부터 리턴된 SWbemObjectSet 개체를 
이용하면서 이 프로퍼티를 사용하려고 시도한다면 wbemErrFailed 오류가 발생하게 된다.
이 말은 마치 ADO 의 레코드셋 개체를 얻을 때 전진 전용 커서를 사용하고 RecordCount 프로퍼티를 사용하려고 하면 오류가 발생한다는 얘기와도 비슷합니다. 따라서 다음과 같은 점들을 통하여 문제 해결을 시도해볼 수 있을 것 같습니다. 먼저 실제로 가능성은 적다고 생각되지만 wbemFlagForwardOnly 옵션이 설정된 부분이 존재한다면 당연히 제거해야 합니다. 그리고 가급적이면 ExecQuery() 메서드를 호출할 때 동기화와 관련된 wbemFlagReturnImmediately 옵션을 설정합니다. 이 옵션은 결과를 동기적으로 리턴하도록 해주는 옵션입니다. 그리고 다음은 이와 관련된 샘플 코드로 플랫폼 SDK 의 WMI 관련 섹션에서 발췌한 것입니다.
' Causes the call to return immediately.
Const wbemFlagReturnImmediately = &H10 
' Causes a forward-only enumerator to be returned (faster).
' 이 옵션은 설정하지 않아야 한다. 첫 번째 옵션만 설정한다.
Const wbemFlagForwardOnly = &H20 

' Make connections to WMI, to the IIS namespace on MyMachine.
set locatorObj = CreateObject("WbemScripting.SWbemLocator")
set providerObj = locatorObj.ConnectServer("MyMachine", "root/MicrosoftIISv2")

' Execute the query, putting the results into a SWbemObjectSet object.
strQuery = "ASSOCIATORS OF {IIsWebVirtualDir='W3SVC/1/Root'}"
set vdirsCol = providerObj.ExecQuery(strQuery, , (wbemFlagReturnImmediately OR _
                                                             wbemFlagForwardOnly))

' Report the results. 
For Each vdirObj in vdirsCol
    ... 생략 ...
Next
위의 샘플 코드는 DNS 와 관련된 코드는 아닙니다만 살펴보시면 해당 옵션을 어떻게 사용하는지 쉽게 파악하실 수 있으실 것입니다. 다만 코드를 자세히 살펴보시면 wbemFlagReturnImmediately 옵션뿐만 아니라 전진 전용을 설정하는 wbemFlagForwardOnly 옵션까지도 설정하고 있다는 것을 알 수 있습니다. 그러나 바로 이 두 번째 옵션은 우리들이 피해야만 하는 옵션이죠. 그렇기 때문에 이 샘플 코드에서도 Count 프로퍼티를 사용하고 있지 않는 것으로 보입니다. 따라서 Count 프로퍼티를 사용하시려면 위의 코드에서 두 번째 옵션은 빼고 설정하셔야 할 듯 합니다. ^_^

이 방법으로 문제를 해결하실 수 있을지는 장담드릴 수 없겠지만 꼭 성공하시기 바랍니다.

감사합니다.
IP 주소: 165.141.121.62
전체 421 건의 게시물, 17 페이지로 구성된 Active Directory Service Interface 게시판의 12 페이지입니다.
게시물
149

re: 웹게시판을 만드는데, 로그인정보를 서버로 계정으로 부터 얻어올려고합니다.

송원석

2005-03-12 5,448
148

re: 웹게시판을 만드는데, 로그인정보를 서버로 계정으로 부터 얻어올려고합니다.

부푸러

2005-03-12 1,489
147

re: 웹게시판을 만드는데, 로그인정보를 서버로 계정으로 부터 얻어올려고합니다.

송원석

2005-03-12 3,157
146

re: 웹게시판을 만드는데, 로그인정보를 서버로 계정으로 부터 얻어올려고합니다. [1]

부푸러

2005-03-18 918
145

다시 질문 합니다...

곰팅이

2005-01-12 4,006
144

re: 다시 질문 합니다...

송원석

2005-01-12 2,966
143

wmi 관련~~~~

곰팅이

2005-01-11 3,048
142

re: wmi 관련~~~~

송원석

2005-01-12 2,924
141

re: wmi 관련~~~~

곰팅이

2005-01-12 3,119

re: wmi 관련~~~~

송원석

2005-01-12 3,146
139

IIsWebServer 삭제시 궁금합니다..

궁금^^

2005-01-07 873
138

re: IIsWebServer 삭제시 궁금합니다..

송원석

2005-01-07 3,314
137

re: 감사합니다^^ [1]

궁금^^

2005-01-08 735
136

dns 서버

곰팅이

2004-11-24 2,892
135

re: dns 서버

송원석

2004-11-24 2,941
134

이 오류좀 봐주세요...

icewind

2004-11-15 3,267
133

re: 이 오류좀 봐주세요...

송원석

2004-11-16 3,380
132

ADSI 테스트를 해 보고 있는데요..

hyochun

2004-11-04 3,117
131

re: ADSI 테스트를 해 보고 있는데요..

송원석

2004-11-04 2,978
130

가상디렉토리 에도 옵션지정이 가능한지요..

짱짜짱(무지막지초보)

2004-11-01 2,943
129

re: 가상디렉토리 에도 옵션지정이 가능한지요..

송원석

2004-11-01 3,012
128

re: 가상디렉토리 에도 옵션지정이 가능한지요..

짱짜짱(무지막지초보)

2004-11-02 3,024
127

re: 가상디렉토리 에도 옵션지정이 가능한지요..

송원석

2004-11-02 3,210
126

초보인데 정말 심각하게 안되네요

디디

2004-10-28 5,617
125

re: 초보인데 정말 심각하게 안되네요

송원석

2004-10-29 3,374