为什么忽略Binding.CloseTimeout值?

时间:2011-06-02 19:09:11

标签: wcf wcf-client

会话客户端Binding.CloseTimeout设置为20秒:

<netTcpBinding>
  <binding name="NetTcpBinding_IService" closeTimeout="00:00:20" ...

a)如果客户端调用proxy.Close时服务没有运行,那么客户端应该在抛出异常之前等待20秒(由于CloseTimeout设置为20秒),而是几乎立即抛出异常:

»套接字连接已中止。这可能是由于处理消息的错误或远程主机超出接收超时或基础网络资源问题引起的。本地套接字超时为'00:00:20'。«

为什么客户端会忽略CloseTimeout值?

谢谢

1 个答案:

答案 0 :(得分:2)

想象一下,客户和服务器都是人,他们在中午开会。

客户在中午迅速出现。如果服务器不在那里,那么客户端立即离开,说“拧它!” (抛出例外)。

如果服务器 ,则会开始协商(建立连接)。如果会议持续时间少于CloseTimeout,因为他们已达成协议(已建立连接)。如果他们没有时间参加会议,他们会放弃谈判(连接尝试超时)。

为免你认为我正在做这件事,this question over on MSDN的回答证实了这一点:

  

如果在指定的地址上找不到服务,通常会发生EncpointNotFoundException。此异常将立即抛出。但是如果找到该服务,但是在20秒内无法建立会话通道,则会遇到超时错误。