为WCF Web服务设置DNS超时

时间:2014-01-21 21:54:28

标签: wcf c#-4.0

我正在使用Visual Studio 2012生成供winforms客户端使用的Web服务。我使用"添加服务引用"创建了客户端。这个winforms客户端是旧的VB 6应用程序的.net c#替代品。以前,在VB应用程序中有超时值的外部设置,包括以下内容:

DNS超时 连接超时 请求超时

当端点主机地址是强制DNS查找的FQDN时,DNS超时将起作用。此处的超时值会限制等待DNS解析的时间。

连接超时会限制winforms客户端等待与服务器建立http连接的时间。 DNS查找本来是成功的。

请求超时会限制在http连接成功后等待请求返回的时间。如果在启动Web服务调用后长时间运行的查询花费的时间太长,这将会发挥作用。

在.net 4.0中是否有类似的内容。我希望能够在app.config中配置它。我知道下面的内容。

<bindings>
  <basicHttpBinding>
    <binding name="IncreasedTimeout" 
      openTimeout="12:00:00" 
      receiveTimeout="12:00:00" closeTimeout="12:00:00"
      sendTimeout="12:00:00">
    </binding>
  </basicHttpBinding>

这些可以映射到我需要的那些,还是真的无关紧要?

感谢

1 个答案:

答案 0 :(得分:1)

WCF绑定的OpenTimeout设置是打开频道时等待的时间长度,所以我相信这与旧的连接超时类似。这应该很快,所以你通常只想指定几秒钟等待(30或更少),而不是12小时。

WCF CloseTimeout用于发送关闭通道消息,这是等待确认的时间。这可能与您的旧架构中没有相同之处。同样,这应该很快,只需要几秒钟。

WCF SendTimeout(用于客户端配置)实质上涵盖了客户端将消息发送到服务以及接收响应(如果有)的时间。这将对应于您的旧请求超时。如果您的服务器需要一段时间来处理事情,这可能需要几分钟。

WCF SendTimeout(用于服务器配置)用于何时需要回调,以便服务器知道等待确认收到其回调的时间。

WCF ReceiveTimeout不适用于客户端配置。对于服务器端配置,ServiceFramework层使用ReceiveTimeout初始化会话空闲超时(说实话我真的不知道那是什么)

此MSDN讨论可能会有所帮助http://social.msdn.microsoft.com/Forums/vstudio/en-US/84551e45-19a2-4d0d-bcc0-516a4041943d/explaination-of-different-timeout-types?forum=wcf

作为最后一点,除非你肯定有长时间运行的请求,否则拥有非常大的超时值并不是一个好主意。这是因为如果客户端未正确关闭连接,则可能会耗尽服务器上的可用资源。