Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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# 无法从传输连接读取数据:C中的远程主机强制关闭了现有连接#_C#_Httpwebrequest_Webrequest_Ioexception_Remote Host - Fatal编程技术网

C# 无法从传输连接读取数据:C中的远程主机强制关闭了现有连接#

C# 无法从传输连接读取数据:C中的远程主机强制关闭了现有连接#,c#,httpwebrequest,webrequest,ioexception,remote-host,C#,Httpwebrequest,Webrequest,Ioexception,Remote Host,我有一个代码,我在其中发送URL请求并接收响应,并将其作为字符串存储为 public String GenerateXML(String q)// Here 'q' is the URL { // Generating the XML file for reference // Getting the response in XML format from the URL Debug.WriteLine("The Http URL after URL encoding

我有一个代码,我在其中发送URL请求并接收响应,并将其作为字符串存储为

public String GenerateXML(String q)// Here 'q' is the URL 
{
    // Generating the XML file for reference
    // Getting the response in XML format from the URL

    Debug.WriteLine("The Http URL after URL encoding :" + q);
    try
    {
        Uri signs1 = new Uri(q);
        //Debug.WriteLine("The Requested URL for getting the XML data :" + re);

        WebRequest request1 = WebRequest.Create(signs1);

        HttpWebResponse response1 = (HttpWebResponse)request1.GetResponse();

        //HttpWebResponse response1 = (HttpWebResponse)request1.GetResponse();

        Stream receiveStream = response1.GetResponseStream();

        StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);

        String ab = readStream.ReadToEnd();// The mentioned error is showing up here.
        // Debug.WriteLine("The data :"+a);
        //XmlDocument content2 = new XmlDocument();

        // content2.LoadXml(ab);

        //  content2.Save("C:/Users/Administrator/Downloads/direct.xml");
        return ab;
    }
    catch (System.Net.WebException ex)
    {
        Debug.WriteLine("Exception caught :" + ex);
        return null;
    } 
}
为什么远程主机关闭了连接? 消除错误或至少忽略错误并继续处理其他URL请求的可能性有哪些?我加入了try-and-catch,以避免任何错误,并在没有任何停止的情况下继续运行。在互联网上搜寻解决方案,但这个特殊问题的解决方案非常具体。请帮忙,谢谢。
提前感谢。

实际异常可能是
IOException
-您需要捕获该异常类型以及
WebException
。实际的问题可能是您的URL已过期,系统不再运行web服务器,或者可能需要对请求进行身份验证/需要@L.B建议的标头

此外,您可能正在泄漏各种资源。您应该使用语句将WebResponse和流包装在

using (var response = (HttpWebResponse)request.GetResponse())
using (var receiveStream = response.GetResponseStream())
using (var reader = new StreamReader(receiveStream))
{
     var content = reader.ReadToEnd();
     // parse your content, etc.
}

我遇到了与不同主机强制关闭连接的类似问题。似乎可以通过更改
WebRequest
对象的各种属性来解决此问题

briancaos在一篇博文中概述了以下发现:

上述帖子中提到的步骤包括:

WebRequest.KeepAlive
设置为
False

WebRequest.ProtocolVersion
设置为
HttpVersion.Version10

WebRequest.ServicePoint.ConnectionLimit设置为
1

它确实适合我,但我还没有在多台主机上测试过它。然而,我郑重地建议大家阅读这篇文章,因为它将更加详细


如果链接get被破坏,这里是Archive.org。

今天也有同样的问题,因此我还将请求包装在一个try/catch with WebException中,在我的例子中,添加:

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
在webRequest完成之前。此外,您还应该使用tvanfosson提到的语句将您的WebResponse和流包装在


我希望这能有所帮助。

可能服务器需要不同的url,可能请求中需要一些特殊的头,可能需要身份验证等等……@L.B如何忽略此问题并继续处理其他url?我已经试过了。还应该做些什么?试一下/接住对这里没有多大帮助。查找文档或者如果您有工作代码,请使用Fiddler查看它发送和接收的内容。嘿,我遇到了相同的问题我的代码是Dim payrep作为HttpWebResponse=DirectCast(payReq.GetResponse(),HttpWebResponse)Dim sr作为新的StreamReader(payrep.GetResponseStream())Dim response作为String=sr.ReadToEnd()sr.Close()以下是不同.NET版本支持的TLS版本: