【问题标题】:System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receiveSystem.Net.WebException:底层连接已关闭:接收时发生意外错误
【发布时间】:2009-04-15 10:21:22
【问题描述】:

我正在尝试在 C# 中创建一个方法来从 url 返回网页 html 内容的字符串。我尝试了几种不同的方法,但我收到错误 System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive.

以下在本地运行良好,但在远程服务器上运行时出现上述错误:

  public static string WebPageRead(string url)
    {
        string result = String.Empty;

        WebResponse response = null;
        StreamReader reader = null;

        try
        {
            if (!String.IsNullOrEmpty(url))
            {
                HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
                request.Method = "GET";
                request.KeepAlive = false;
                request.ProtocolVersion = HttpVersion.Version10;

                response = request.GetResponse();
                reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                result = reader.ReadToEnd();
            }
        }
        catch (Exception exc)
        {
            throw exc;
        }
        finally
        {
            if (reader != null)
            {
                reader.Close();
            }

            if (response != null)
            {
                response.Close();
            }
        }

        return result;
    }

【问题讨论】:

  • 可以肯定的是,可以使用 Web 浏览器或其他 HTTP 客户端请求有问题的 URL?是否有可能为 Internet Explorer 设置代理,或者远程服务器是否需要一些身份验证,例如 NTLM?

标签: c# webrequest


【解决方案1】:

这可能不是问题,但请尝试以下操作:

public static string WebPageRead(string url)
{
    if (String.IsNullOrEmpty(url))
    {
        return null;
    }

    HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
    if (request == null)
    {
        return null;
    }

    request.Method = "GET";
    request.KeepAlive = false;
    request.ProtocolVersion = HttpVersion.Version10;

    using (WebResponse response = request.GetResponse())
    {
        using (Stream stream = response.GetResponseStream())
        {
            using (StreamReader reader = 
                       new StreamReader(stream, Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }
    }
}

我回应先前的答案,建议您使用已知的良好 URL 尝试此操作。我要补充一点,您应该使用已知良好的 HTTP 1.1 URL 尝试此操作,注释掉将版本设置为 1.0 的行。如果这有效,那么它会大大缩小范围。

【讨论】:

    【解决方案2】:

    感谢您的回复,问题是由于远程服务器上的 DNS 问题!为了确认,我最后使用了以下代码:

        public static string WebPageRead(string url)
        {
            string content = String.Empty;
    
            if (!String.IsNullOrEmpty(url))
            {
                HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
    
                if (request != null)
                {
                    request.Method = "GET";
                    request.KeepAlive = false;
                    request.ProtocolVersion = HttpVersion.Version10;
    
                    try
                    {
                        using (WebResponse response = request.GetResponse())
                        {
                            using (Stream stream = response.GetResponseStream())
                            {
                                using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                                {
                                    content = reader.ReadToEnd();
                                }
                            }
                        }
                    }
                    catch (Exception exc)
                    {
                        throw exc;
                    }
                }
            }                    
    
            return content;
        }
    

    【讨论】:

    • 我很好奇 DNS 问题是什么?尽管代码和配置文件相同,但我在我们的开发机器上遇到了同样的错误,但在我们的生产机器上却没有。
    • 您如何解决上述问题,因为我仍然从您的代码中收到该错误!
    【解决方案3】:

    之前遇到过这样的问题,通过在有问题的机器上打开 IE 中的 url 解决了。然后 IE 会询问您是否要将 url 添加到安全站点列表中。添加它,它适用于该网址。

    这只是可能的原因之一。严重的是,很多其他问题都可能导致这种情况。除了上述问题之外,我发现解决此问题的最佳方法是捕获异常并重试请求。

    【讨论】:

      猜你喜欢
      • 2020-06-24
      • 1970-01-01
      • 2015-07-05
      • 2011-01-25
      • 2014-03-10
      相关资源
      最近更新 更多