如何解决“操作超时”错误

时间:2011-05-04 07:30:27

标签: c# winforms httpwebrequest httpwebresponse

我遇到一个问题,即在下载数据时会显示错误“操作已超时”。

我该怎么做才能解决此错误?我正在使用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();

3 个答案:

答案 0 :(得分:1)

请求超时前有多长时间? 您是否可以从网络浏览器导航到网址?

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

您可以使用异步回调(BeginGetResponse / EndGetResponse),而不是阻止getresponse。

修改

<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>  

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

答案 1 :(得分:0)

将此添加到您的代码中:

httpRequest.Timeout = 3600000;

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

答案 2 :(得分:0)

在服务器上执行控制台应用程序时遇到相同的问题。下面的解决方案为我工作:

在Internet选项中的Lan设置下取消选中自动配置脚本,然后检查自动检测设置。 它解决了我的操作超时错误问题。