Microsoft MVP성태의 닷넷 이야기
[답변]: 비동기 DB 쿼리관련 질문 [링크 복사], [링크+제목 복사],
조회: 19366
글쓴 사람
정성태 (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]


비밀번호

댓글 작성자
 




... 31  32  33  34  35  36  37  38  39  40  41  42  [43]  44  45  ...
NoWriterDateCnt.TitleFile(s)
4814김솔지3/13/201719433인쇄 시 , 출력화면을 이미지 파일로 저장하고 싶습니다. [1]파일 다운로드1
4813spow...3/8/201721490멀티 스레드 환경에서 처리하여야 할 목록을 효율적으로 사용하는 기법 질문 드립니다 [2]
4812popo2/23/201721706.NET Window ClassName 변경 질문 드립니다. [1]
4809힘찬도약2/15/201724447C# 가상 시리얼 [4]
4808이길용2/9/201723588WCF 외부 접속 관련해서 질문드립니다ㅠ [1]
4807헬조선식...2/8/201731206WPF의 속도에 대해서 궁금합니다. [3]
4803헬조선식...2/7/201723434WPF로 메신져 메세지 박스 구현 문의 [2]
4802spow...2/6/201720652특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은? [7]
4804spow...2/7/201719402    답변글 [답변]: 특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은?
4805spow...2/7/201719257    답변글 [답변]: 특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은? (글삭제가 안돼 재첨부합니다)파일 다운로드1
4801spow...2/3/201719181C#의 참조 동작관련하여 아이디어 문의 드립니다 [4]
4800오세운2/1/201723771C# 에서 C++ DLL임포트 질문입니다. [2]
4798guest1/29/201721381picturebox의 image.dispose [1]
4797김철환1/13/201721519책에 관한 질문입니다 [3]
4796Bere...1/13/201720994++ 후위연산자와 = 을 함께 사용할 때 생성되는 IL 코드 관련... [2]
4795김철환1/11/201722221이벤트 부분을 읽고 있는데 이해가 안되서 질문합니다.. [11]
4794김철환1/10/201719661안녕하세요 c# 6.0 책을 구매한 사람인데요 [3]
4793장준영1/7/201721446안녕하세요 c언어 처음 공부해보는 학생입니다 [4]파일 다운로드1
4792김재영1/4/201724581소스코드 공개 전 성태님의 의견을 듣고싶습니다 [3]
4791C#초보12/28/201623487비동기 소켓 close시 ObjectDisposedException 문제점 질문 있습니다.. [1]
4790미나리12/24/201623909파워포인트 쇼 제어 SimpleHttpServer.cs 작동문제 [4]파일 다운로드1
4789김솔지12/21/201621235프린트 시, 프린트하는 파일의 파일명 구하는 부분에 대해서 질문드립니다. [1]
4788짜두12/19/201622386Visual Studio 2015 에서 msbuild 12 사용 [5]
4787guest12/18/201625192VLC라이브러리에 대해 아시나요? [3]파일 다운로드1
4785Hyou...12/16/201623515WPF 개발 시 MVVM 프레임워크 사용 [2]
4784ds12/15/201619474문의 드립니다. [2]
... 31  32  33  34  35  36  37  38  39  40  41  42  [43]  44  45  ...