2012-12-05 2 views
1

클라이언트에서 소비하는 WCF 서비스에서 두 가지 작업을 호출해야합니다. 이 두 작업은 동시에 두 번 이상 완료되기 때문에 동시에 호출해야합니다. 두 통화가 모두 완료되면 클라이언트에서 계속 작업하고 싶습니다. 나는 이것을 구현하기 위해 가장 좋은 모델이 무엇인지에 대해 조금 갇혀있다. 어떤 도움이나 코드 샘플도 인정 될 것입니다.한 클라이언트 메서드에서 두 개의 비동기 WCF 서비스 메서드를 호출하고 호출이 반환 될 때까지 해당 메서드를 기다리십니까?

또한 클라이언트에서 동일한 방법으로 WCF 서비스의 메서드를 호출 한 다음이 메서드가 호출 완료 될 때까지 기다릴 수 있습니까? (이 두 함수가 반환 될 때까지 기다리는 동안 클라이언트에서 계속 진행되는 작업이 없으므로 비동기 호출을 시작하는 동일한 메서드에서 기다릴 수 있습니다.)

.NET 4.0/VS 2010 사용 & Visual 기본.

감사합니다.

답변

1

"컨트롤"을 어디에 앉을 지 생각하고 싶을 것입니다. 예를 들어, 클라이언트가 두 개의 호출을 만들도록 할 수 있습니다. 각 호출은 하나의 함수를 수행하거나 클라이언트가 하나의 호출을 만들어 두 호출을 서버에서만 수행하게 할 수 있습니다.

이 가이드는 이러한 두 가지 작업이 얼마나 긴밀히 연결될지를 보여줍니다. 그들은 항상 함께 처형 될 것인가? 클라이언트가 때때로 작업 중 하나만 실행하려고 할 가능성이 있다면 융통성을 위해 두 번의 wcf 호출이 있어야합니다. 따라서 클라이언트는 거의 "pick'n'mix"를 수행 할 수 있습니다.

클라이언트가 두 번의 전화를 걸기에 적합한 장소라고 결정하면 배경 근로자가 도움을 줄 수 있습니다.

어느 쪽이든, 사물의 소리가 나면 두 가지 일이 완료 될 때까지 기다리고 앉아있는 코드를 작성해야합니다. 과거에 사용한 방법은 시스템 이벤트를 사용하는 것입니다. 이용 가능한 기능의 종류에 대한 아이디어를 얻으려면 방법 WaitHandle.WaitAll을 확인하십시오. 이것들은 꽤 방탄적인 괴물이며 wcf 같은 것들과는 무관합니다. 그 때의 단점은 그들이 자원을 많이 차지한다는 것입니다. 그래서 많은 사람들 (수십 명)이 끝나면 다시 생각해보십시오. 그러나 두 가지는 문제가되지 않습니다.

+0

두 개의 작업은 항상 함께 호출됩니다 ... – spse

+0

"이 일이 일어나고있는 동안 클라이언트에서 진행되는 것이 아무것도 없습니다"라고 말한 작은 부록으로이 부분을 다시 생각해보십시오. 애니메이션 GIF를 집어 넣더라도 응답이없는 프론트 엔드보다 사용자 경험이 더 좋습니다. – PeteH

+0

그들이 항상 함께 있다면 당신은 선택의 여지가있다. (그러나 의심의 여지없이 절대적인 비즈니스 기능이 아니라면 50/50 일 것이다. 단일 wcf 호출로이 모든 작업을 수행하기로 결정 했더라도 시스템 이벤트가 매력적이었습니다. 그러나 클라이언트 측만을위한 것이므로 백그라운드 워커를 사용하여 스레드를 생성해서는 안됩니다. – PeteH

관련 문제