Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.Net.WebException:基础连接已关闭:接收时发生意外错误_C#_Webrequest - Fatal编程技术网

C# System.Net.WebException:基础连接已关闭:接收时发生意外错误

C# System.Net.WebException:基础连接已关闭:接收时发生意外错误,c#,webrequest,C#,Webrequest,我试图用C#创建一个方法,从url返回一个网页html内容字符串。我尝试了几种不同的方法,但出现错误System.Net.WebException:基础连接已关闭:接收时发生意外错误。 以下操作在本地运行正常,但在远程服务器上运行时会出现上述错误: public static string WebPageRead(string url) { string result = String.Empty; WebResponse response = nu

我试图用C#创建一个方法,从url返回一个网页html内容字符串。我尝试了几种不同的方法,但出现错误System.Net.WebException:基础连接已关闭:接收时发生意外错误。

以下操作在本地运行正常,但在远程服务器上运行时会出现上述错误:

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

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


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

这可能不是问题所在,但请尝试以下方法:

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。我要补充的是,您应该使用已知良好的HTTP1.1URL来尝试此操作,并注释掉将版本设置为1.0的行。如果这样做行得通,那么它会大大缩小范围。

感谢您的回复,问题是由于远程服务器上的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;
    }

可以肯定的是,可以使用web浏览器或其他HTTP客户端请求有问题的URL?是否有可能为Internet Explorer设置代理,或者远程服务器是否需要一些身份验证,例如NTLM?我很好奇DNS问题是什么?尽管代码和配置文件相同,但我在我们的开发机器上遇到了相同的错误,但在我们的产品机器上却没有。由于我仍然从您的代码中收到该错误,您是如何解决上述问题的!