【发布时间】:2015-11-04 03:34:26
【问题描述】:
我正在尝试弄清楚如何让我的 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。
-
我也注意到如果在_proxy.Open()之前设置断点,查看_proxy的内部成员然后让代码继续运行Open,最后会返回InvalidOperationException。看起来这是因为调试器评估了一些会导致副作用的属性。