我想弄清楚如何让我的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