2011-05-04 162 views
3

我有一个问题,在下载数据时显示错误“The Operation has timed out”。如何解决“操作超时”错误

我能做些什么来解决这个错误?我使用Win窗体(C#)这里是我的代码,请检查并提供建议。我应该在哪里更改代码,请帮我...

public void ProcessData() 
     { 


      try 
      { 
      string MessageTitle = ""; 
      int pages = Convert.ToInt32(txtPages.Text); 

      for (int k = Count; k <= pages; k++) 
      { 

       string url = "http://www.yellowpages.com/" +StateName.ToLower()+ "/" + CategoryName + "?g=" + StateName + "&page=" + k + "&q=" + CategoryName + "";//txtYP.Text + k; 
       System.Net.HttpWebRequest httpRequest; 
       System.Net.HttpWebResponse httpResponse; 
       System.IO.StreamReader SReader; 
       string html; 
       httpRequest = (System.Net.HttpWebRequest)(System.Net.HttpWebRequest.Create(url)); 
       httpRequest.Method = "GET"; 
       httpResponse = (System.Net.HttpWebResponse)(httpRequest.GetResponse()); 
       SReader = new StreamReader(httpResponse.GetResponseStream()); 
       html = SReader.ReadToEnd(); 
       string strDummy = html; 
       httpResponse.Close(); 

回答

1

请求超时之前多长时间? 你能够从网页浏览器导航到网址吗?

将HttpWebRequest上的HttpWebRequest.ReadWriteTimeout属性设置为比当前值高得多的值。默认值是5分钟。 不知道为什么它应该需要超过5分钟。

而是上阻塞的GetResponse的,你还可使用异步回调(BeginGetResponse/EndGetResponse)。

编辑

<system.diagnostics> 
    <trace autoflush="true" /> 
    <sources> 
    <source name="System.Net"> 
     <listeners> 
     <add name="System.Net"/> 
     </listeners> 
    </source> 
    <source name="System.Net.HttpListener"> 
     <listeners> 
     <add name="System.Net"/> 
     </listeners> 
    </source> 
    <source name="System.Net.Sockets"> 
     <listeners> 
     <add name="System.Net"/> 
     </listeners> 
    </source> 
    <source name="System.Net.Cache"> 
     <listeners> 
     <add name="System.Net"/> 
     </listeners> 
    </source> 
    </sources> 
    <sharedListeners> 
    <add 
     name="System.Net" 
     type="System.Diagnostics.TextWriterTraceListener" 
     initializeData="trace.log" 
     traceOutputOptions = "ProcessId, DateTime" 
      /> 
    </sharedListeners> 
    <switches> 
    <add name="System.Net" 
     value="Verbose" /> 
    <add name="System.Net.Sockets" 
     value="Verbose" /> 
    <add name="System.Net.Cache" 
     value="Verbose" /> 
    <add name="System.Net.HttpListener" 
     value="Verbose" /> 
    </switches> 
</system.diagnostics> 

添加此栏目内configuration部分应用程序的app.config中。 添加上述内容后,重新构建解决方案并运行它。 查看您的应用程序的bin目录中写入的trace.log以获取更多详细信息。

+0

感谢您给予回复,,,是的,我能够浏览从网络浏览器的网址...如何设置Httprequest时间,请helpme ....在哪里我可以编写代码... – 2011-05-04 08:00:10

+0

为什么它显示此错误“请求被中止:连接意外关闭。” – 2011-05-04 08:08:55

+0

在我看来,你正在锤击一个你不拥有请求的站点,并且正在被他们的防火墙\ bot机制阻止。 – Arunas 2011-05-04 10:01:43

0

添加到您的代码:

httpRequest.Timeout = 3600000;

这会将请求超时增加到一个小时。

+0

嗨,谢谢你给予respose ...实际上我们不知道它需要多少时间可能是5小时或7小时..... – 2011-05-04 12:57:43

+0

然后把它放在10个小时,一些程序有近24小时超时他们的要求。所以它的测试很好。 – Arrabi 2011-05-04 13:08:43