진행하기 전에 대기하거나 서비스 호출을 허용하기 위해 대기 할 WCF 프록시 클래스를 얻는 방법을 알아 내려고하고 있습니다. WCF 프록시 클라이언트가 준비 될 때까지 기다리는 방법?
나는이 같은 시도 :_proxy = new WCFBlackjack(new NetNamedPipeBinding(), new EndpointAddress("net.pipe://localhost/blackjack/IWCFBlackjack"));
while(!_proxy.State.Equals(CommunicationState.Opened)) {
if(!_proxy.State.Equals(CommunicationState.Opening)) {
try {
_proxy.Open();
} catch(EndpointNotFoundException enfe) {
/* ... */
}
}
System.Threading.Thread.Sleep(1);
}
을하지만 분명히 그 그렇지 않으면 내가 여기되지 않을 것 작동하지 않습니다. 처음에는 작동하지만 ChannelFactory는 open 문에 InvalidOperationException을 발생시킵니다.
나는 WCF에 익숙하지 않고 소켓 - 에스 쿠크 (Sockets-esque)의 라인을 너무 많이 생각하고있다. 그러나 엔드 포인트를 사용할 수있게되거나 찾을 수있을 때까지 클라이언트가 계속 시도하기를 원한다. 연결되어있는 이벤트 또는 그 라인을 따라 무언가를 발사하십시오.
서비스가 실행 중인지 여부에 관계없이 서비스 호스팅 여부와 새로운 상태가 "생성 됨"상태인지 확인하십시오. 서비스가 작동중인 경우 첫 번째 메소드 호출 이후 Open 상태가됩니다 (그러나 전에는 그렇지 않습니다). – Paparazzi
_proxy.Open() 전에 중단 점을 설정하고 _proxy의 내부 멤버를보고 코드를 계속 실행하고 Open을 실행하면 마지막으로 InvalidOperationException이 반환됩니다. 디버거가 부작용을 유발하는 일부 속성을 평가하기 때문입니다. – Monsignor