wcf channelfactory和opentimeout

Ale*_*dre 6 wcf

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

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

在此之后,我正在调用方法但是如果服务器已经关闭,则需要21秒而不是我改变的5,OpenTimeout我错过了什么吗?

TKS

小智 5

我在下一个方面解决了这个问题.它似乎是有效的.

    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;
    }
Run Code Online (Sandbox Code Playgroud)


cha*_*dmk 0

看来 WCF 所做的其他事情并未计入 opentimeout。看看这个线程

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/5f347965-13bf-4a2d-ae82-74ad38a8d7d1/

[编辑] 当我使用 .Net 4.0 尝试此操作时,当 wcf 服务不可用时,超时会在 2 秒内发生。Opentimeout 没有影响。如果 wcf 服务可用但由于某种原因没有响应,您可以通过在绑定上设置 sendtimeout 设置来让客户端等待任意长时间。