c# - 如何解决 "The operation has timed out"错误

标签 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();

最佳答案

请求超时前多久? 您能否从网络浏览器导航到该网址?

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

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

关于c# - 如何解决 "The operation has timed out"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5880020/

相关文章:

同一应用程序池中不同 Web 应用程序中的 c# 静态变量

C# WinForms 智能密码文本框类

c# - 显示列表中的日期 C#

c# - HttpWebRequest.GetResponse 方法卡住特定的 url

c# - 按另一个 List<T> 对 List<T> 进行排序

c# - Visual Studio 安装程序 > 如何在安装程序结束时启动应用程序

c# - System.Drawing.dll/NumericUpDown 的 .NET 访问冲突异常

C# httpwebrequest 和 javascript

java - 如果网页已更新,则发出警报

c# - 动态运行时对象创建 : Keep intellisense?