Microsoft MVP성태의 닷넷 이야기
[답변]: 비동기 DB 쿼리관련 질문 [링크 복사], [링크+제목 복사],
조회: 18457
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
부모글 보이기/감추기

제가 기억하기로는 위에서 적은 DAC 코드가 실행되는 곳이 WCF 서버 측이죠?
그리고, 위의 DAC 코드가 실행되는 WCF메서드를 호출하는 곳이 별도로 클라이언트이고.

그런데, 클라이언트에서 그 WCF 메서드를 실행하면 InactivityTimeout 때문에 WCF 채널이 faulted 상태로 빠지는 것이죠?

위의 코드라면, 그렇게 되는 것이 맞습니다.
왜냐하면 위의 DAC 코드에서 사용한 BeginExecuteReader는 비동기 함수이긴 하지만, 그 이후에 while 문을 통해서 쓰레드를 여전히 점유하고 있기 때문에, WCF 메서드를 부른 클라이언트 측 역시 계속 블로킹 상태에 놓이게 됩니다.

while 문으로 받아서는 안되고 콜백함수를 통해서 처리를 하셔야 하는데요. 물론 그렇게 하면 클라이언트 측은 WCF 메서드를 부르고는 결과를 받지도 못하고 쓰레드가 진행되기 때문에 또한 문제가 발생합니다.

제 생각에는, 이런 경우 문제를 해결하기 위해서는 어쨌든 클라이언트 쓰레드를 최대한 자유롭게 해주어야 합니다.
이런식으로 우회해야 할 것 같습니다.

=== client ====
int cookie = wcf_channel.DoMethod(); // WCF 메서드를 호출

=== server ====
int DoMethod()
{
int random_cookie = ....; // 메서드 호출 구분을 위한 고유값을 구해놓고. (또는 Guid 로 한다든가.)
cmd.BeginExecuteReader(...); // 비동기 호출을 하고.
return cookie; // 곧바로 cookie 값만을 반환해서 클라이언트 측 쓰레드를 자유롭게 놓아주고.
}

void BeginExecuteReader_Callback_Result() // BeginExecuteReader 에 대한 비동기 콜백함수가 실행되고.
{
... // DB 쿼리 조회값을 구하고.
channel_Callback(cookie, logs); // 클라이언트 측에 WCF 콜백 메서드를 호출
}

==== client ====

void channel_Callback(int cookie, List logs)
{
// 이때, 최초 wcf_channel.DoMethod(); 호출 결과에 대한 값을 처리.
}



[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 6/10/2010]


비밀번호

댓글 작성자
 




... 76  77  78  79  80  81  82  [83]  84  85  86  87  88  89  90  ...
NoWriterDateCnt.TitleFile(s)
407김용국6/21/200613287                답변글 [답변]: 다시한번 문의드립니다!
398김성호6/17/200613887IE프로그래밍 관련하여 질문이
400정성태6/19/200613621    답변글 [답변]: IE프로그래밍 관련하여 질문이 [5]
396guest6/13/200613449CallByName 을 어떻게 처리해야 할지 ....조언 부탁합니다.
397정성태6/15/200612948    답변글 [답변]: CallByName 을 어떻게 처리해야 할지 ....조언 부탁합니다.
399guest6/19/200612542        답변글 [답변]: [답변]: CallByName 을 어떻게 처리해야 할지 ....조언 부탁합니다.
392이상식6/9/200613358스마트클라이언트 실행환경 관련 질문입니다.
394정성태6/12/200613244    답변글 [답변]: 스마트클라이언트 실행 환경 관련 질문입니다.
395이상식6/12/200613535        답변글 [답변]: [답변]: 스마트클라이언트 실행환경 관련 질문입니다.
391심현철6/9/200613481Win32 platform과 .NET platform간의 성능이 어느정도 차이가 날까요?
393정성태6/12/200613216    답변글 [답변]: Win32 platform과 .NET platform간의 성능이 어느정도 차이가 날까요?
390이현행6/6/200613390정말 답답해서 그렇습니다. [1]
389임경훈6/2/200623262sql과 oracle 사용시 파라메타 차이점
387창민 6/1/200615232안녕하세요.문제가 걸렸는데 해결기미가 안보여서 답답해서.. 혹시 아시면 문제 채질이라도...파일 다운로드1
388정성태6/1/200614858    답변글 [답변]: 안녕하세요.문제가 걸렸는데 해결기미가 안보여서 답답해서.. 혹시 아시면 문제 채질이라도...
385오윤섭5/31/200612506SmartClient 동적호출
386정성태6/1/200613019    답변글 [답변]: SmartClient 동적 호출
380윤용한5/29/200613018ATL Event에서 스크립트가 값을 다시 돌려주는 방법은?파일 다운로드1
381윤용한5/29/200612733    답변글 [답변]: ATL Event에서 스크립트가 값을 다시 돌려주는 방법은?
382윤용한5/29/200613282        답변글 [답변]: [답변]: ATL Event에서 스크립트가 값을 다시 돌려주는 방법은?
383정성태5/30/200613613            답변글 [답변]: [답변]: [답변]: ATL Event에서 스크립트가 값을 다시 돌려주는 방법은?
378guest5/26/200613018managed 와 unmanaged 의 차이가 뭐져?
379정성태5/26/200613302    답변글 [답변]: managed 와 unmanaged 의 차이가 뭐져? [1]
384guest5/30/200612876        답변글 감사합니다.
376노기도5/16/200613066vb6의 GetObjectContext 를 2005에서는 어떻게 사용해야 하나요? [3]
375이덕희5/15/200615264SmartClient 강좌를 보고... 엑박이 나옵니다... [2]파일 다운로드1
... 76  77  78  79  80  81  82  [83]  84  85  86  87  88  89  90  ...