다음과 같은 상황이 있습니다. 내 WCF 서비스를 사용하면 클라이언트가 일부 이벤트를 대기하도록 등록 할 수 있습니다. 대기는 서비스 측면에서 비동기식입니다. 즉, 웨이터가 등록되며 프로세스가 완료되면 웨이터에게 알림이 전송됩니다. 현재로서는 ManualResetEvent
입니다.비동기 끝 <Method>이 WCF에서 호출되지 않았습니다.
이제이 메서드를 WCF를 통해 노출하고 싶습니다. AsyncPattern=true
을 사용하여 IAsyncResult
및 EndWait
에 이벤트를 묶는 BeginWait
이라는 두 가지 방법을 만들었습니다.이 중 하나는 AsyncWaitHandle.WaitOne()
입니다. 그러나 클라이언트에서 BeginWait
, EndWait
으로 전화하면 서버 쪽 EndWait
이 실행되지 않습니다. 나는 기본적으로 Channel.EndWait()
을 호출하는 수동으로 구현 된 래퍼 (내 프록시 클래스는 ChannelBase<IWaitService>, IWaitService
에서 파생 됨)를 사용하고 있으며이 함수는 실제로 호출됩니다. 서버 쪽에서는 전화가 도착하지 않습니다.
내가 뭘 잘못하고 있니? 후속 질문 : 비동기 호출이 작동하는 경우 클라이언트 측에서 동기식 호출을 수행하는 쉬운 방법이 있습니까?
당신은 HTTP를 체크 아웃 할 수 있습니다 : 선은 과부하 WCF에 의해 전달 된 상태 개체가 작업에 끝나는
있도록
를 사용으로 수정해야합니다 : //blogs.msdn.com/mjm/archive/2005/05/04/414793.aspx 주로 sync-as-async가 '로컬'일 (클라이언트에서 메소드 동기화 또는 비동기를 호출 할 수 있음을 서버에서 동기화 또는 비동기로 구현 될 수 있습니다.이 두 가지는 아무 관계가 없습니다. 서로). – Brian
기본적으로 블로그 게시물에서 해결되었습니다. 귀하의 의견에 답을 할 수 있도록 받아 들일 수 있습니까? – Anteru