2014-01-21 139 views
1

我正在使用Visual Studio 2012生成要由winforms客户端使用的Web服务。我使用“添加服务引用”创建了客户端。这个winforms客户端是一个.net c#替换旧的VB 6应用程序。此前,在VB应用程序有超时值,包括外部设置如下:为WCF web服务设置DNS超时

DNS超时 连接超时 请求超时

端点主机地址是FQDN迫使DNS查询时,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

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

WCF CloseTimeout用于发送Close Channel消息时,这是等待确认的时间。这在旧的架构中可能没有相同之处。再次,这应该是快速的,应该只需要几秒钟。

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

WCF SendTimeout(用于服务器配置)适用于需要回调的情况,以便服务器知道等待接收回调的确认需要多长时间。

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

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

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

+0

看起来像DNS超时将是OpenTime的一部分。我认为这样会好的。无论如何,我无法控制DNS查找,因为我无法控制这些服务器。 –

+0

SendTimeout是主要的,我可以将它设置得非常低,并触发超时异常。 OpenTime我设置得很低,但从未触发超时异常。 –

+0

这也是我的经验。我为OpenTimeout使用了30秒,但是我可能应该使用5或10,因为我读过的文献说,在像我这样的封闭环境中,通道的打开和关闭应该更像是一秒或更短。但我总是宁愿给自己一点缓冲。 – DeanOC