我想弄清楚如何讓我的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的新手,也許我正在考慮太多的東西是套接字式的,但我希望我的客戶端繼續重試,直到端點變得可用或可以找到,並以某種方式發起關聯事件或沿着這些線路發生的事情。
運行服務託管或不託管測試,以及新建「後創建」的狀態,無論服務是否啓動。如果服務處於啓動狀態,則在第一次方法調用後(但不是在此之前),它的狀態爲「打開」。 – Paparazzi 2012-07-12 17:43:25
我也注意到,如果你在_proxy.Open()之前設置斷點,看看_proxy的內部成員,然後允許代碼繼續並運行Open,最後將返回InvalidOperationException。看起來這是因爲調試器評估了一些導致副作用的屬性。 – Monsignor 2014-01-10 11:50:59