在客户端中,我试图连接到WCF,将OpenTimeout属性更改为5秒,但是它不起作用....这是我创建 channel 的方式:

NetTcpBinding bind = new NetTcpBinding(SecurityMode.None);
bind.OpenTimeout = new TimeSpan(0, 0, 5);
var channel = new ChannelFactory<IService>(bind, new EndpointAddress(myAddr));
channel.CreateChannel();

在此之后,我将调用该方法,但是如果服务器出故障,则需要21秒,而不是我在OpenTimeout上更改的5秒,我是否丢失了某些内容?

ks

最佳答案

我以另一种方式解决了这个问题。这似乎是可行的。

    protected TServiceContract CreateChannel()
    {
        TServiceContract channel = factory.CreateChannel();

        var ar = ((IChannel)channel).BeginOpen( null, null );

        if( !ar.AsyncWaitHandle.WaitOne( factory.Endpoint.Binding.OpenTimeout, true ) )
        {
            throw new TimeoutException( "Service is not available" );
        }

        ((IChannel)channel).EndOpen( ar );

        return channel;
    }

关于wcf channelfactory和opentimeout,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8953112/

10-10 05:48