Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host in C#

user3188390 picture user3188390 · Jan 30, 2014 · Viewed 28.1k times · Source

I have a code where I am sending the URL request and receiving the response and storing it as a String as

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

Why is the connection closed by the remote host? What are the possibilities of getting rid of the error or at least ignore the error and continue with other URL requests? I have included try and catch so as to escape any error and continue functioning with out any stop. Scoured the internet for solution but solutions to this particular problem is pretty much specific. Please any help is appreciated. Thanks in advance.

Answer

Jed Burke picture Jed Burke · Mar 14, 2015

I had similar problems with the connection being forcibly closed with different hosts. Seems the issue can be resolved by altering various properties of the WebRequest object.

The following findings were outlined in a blog post by briancaos: An existing connection was forcibly closed by the remote host

The steps mentioned in the the above post include:

Set WebRequest.KeepAlive to False.

Set WebRequest.ProtocolVersion to HttpVersion.Version10.

Set WebRequest.ServicePoint.ConnectionLimit to 1

It indeed work for me, but I haven't tested it on multiple hosts as of yet. However, I seriously suggest reading the post as it goes into way more detail.

In case the link get's broken, here's the Archive.org cached version.