C#Web引用调用超时

时间:2010-08-24 18:11:24

标签: c# web-services

我正在使用网络参考调用外部服务。 IP是动态的,所以我逐个称呼它们,一切正常。定期某些IP将无法使用,我正在处理我正在处理的超时。问题是每次呼叫超时所需的时间大约为30秒。我尝试将ws上的超时属性更改为5秒,但似乎没有什么区别。有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:1)

以下是我要找的答案: Adjusting HttpWebRequest Connection Timeout in C#

****重要代码段:****

来自HttpWebRequest.Timeout属性的MSDN文档:

  

域名系统(DNS)查询最多可能需要 15 秒才能返回或时间   出。如果您的请求包含需要解析的主机名,并且您将Timeout设置为小于15秒的值,则可能需要15秒或更长时间才会抛出WebException以指示请求超时。

答案 1 :(得分:1)

您可以使用更短的超时(例如1000毫秒)自行执行DNS查找:

http://www.chapleau.info/cs/blogs/fchapleau/archive/2008/09/09/reverse-dns-lookup-with-timeout-in-c.aspx

然后(如果找到IP地址)使用例如TimeOut使用IP地址执行Web服务调用(以避免DNS查找无法控制超时) 4000毫秒(甚至更好:5000毫秒 - (DNS查找所用的时间))实现5000毫秒的总超时。

答案 2 :(得分:0)

你说你把“ws的超时属性改为5秒”。如果您正在更改服务器上的超时,那么当您的客户端无法连接时,这将无法帮助您。

您正在使用“网络参考”,因此我假设您有一个源自System.Web.Services.Protocols.SoapHttpClientProtocol的客户端类。该类派生自System.Web.Services.Protocols.WebClientProtocol,它具有Timeout属性。在拨打电话之前尝试更改客户端上的该属性,看看是否会获得更好的结果。

答案 3 :(得分:0)

如果在创建代理对象之前ping IP地址并在此处调用Web服务,则可能会有所帮助,这是有关Ping类http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.aspx的详细信息