繁体   English   中英

如何等待WCF代理客户端准备好?

[英]How to wait for WCF proxy client to be ready?

我试图弄清楚如何让我的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的新手,也许我在思考Socket-esque的问题上有太多想法,但我希望我的客户端继续重试,直到端点可用或者找到,并以某种方式触发 - 连接事件或沿着这些线的东西。

使用EndpointNotFoundException,您可能会看到类似“没有端点正在侦听......”的消息。 发生的事情是,在你的while循环中,你在第一遍打开代理,处理错误,然后在第二遍你得到InvalidOperationException,说“通信对象,System.ServiceModel.Channels.ServiceChannel,不能在处于打开状态时进行修改。“

如果中止现有代理上的连接,则无法将其用于进行通信。 关闭连接后,将丢弃代理对象。 解决方案是关闭现有代理并创建一个新代理。 我已在下面更新了您的代码:

_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) {
            /* ... */
            _proxy.Abort();
            _proxy = new WCFBlackjack(new NetNamedPipeBinding(), new EndpointAddress("net.pipe://localhost/blackjack/IWCFBlackjack"));
        }
    }
    System.Threading.Thread.Sleep(1);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM