Http post error: An existing connection was forcibly closed by the remote host

15,470

Solution 1

I think its because you are connecting to "https" url. In this case you have to add following line to your code.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

It will accept "ssl" protocol for your request. "ServicePointManager.ServerCertificateValidationCallback" handler just controls certificate validity.

Solution 2

Slightly better perhaps:

System.Net.ServicePointManager.SecurityProtocol = System.Net.ServicePointManager.SecurityProtocol | System.Net.SecurityProtocolType.Tls12;
Share:
15,470

Related videos on Youtube

HuwD
Author by

HuwD

Updated on June 14, 2022

Comments

  • HuwD
    HuwD almost 2 years

    I realise there have been a number of similar posts to this but I haven't found a solution yet. Am trying to post some xml to an MPI gateway but keep getting the following error:

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

    Below is the code I'm currently using but have tried just about every different approach I can think of and they all return the same error:

            string result = "";
    
            string xml = "<TNSAuthRequest><CardNumber>0123456789</CardNumber><ExpiryDate>1801</ExpiryDate><PurchaseAmt>750</PurchaseAmt><CurrencyCode>826</CurrencyCode><CurrencyExponent>2</CurrencyExponent><CountryCode>826</CountryCode><MerchantName>Mayflower</MerchantName><MerchantId>0123456789</MerchantId><MerchantData>abcdefghijklmnopqrstuvwxyz0123456789</MerchantData><MerchantUrl>example.com</MerchantUrl><NotificationURL>example.com/basket</NotificationURL></TNSAuthRequest>";
    
            var url = "https://mpi.securecxl.com";
            byte[] bytes = System.Text.Encoding.ASCII.GetBytes("xmldata=" + xml.ToString());
    
            ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback(ValidateRemoteCertificate);
    
            var req = (HttpWebRequest)WebRequest.Create(url);
            req.AllowWriteStreamBuffering = true;
            req.ContentType = "text/xml";
            req.Method = "POST";
            //req.ContentLength = bytes.Length;
            req.KeepAlive = false;
            req.ProtocolVersion = HttpVersion.Version10;
            req.ServicePoint.ConnectionLimit = 1;
            //req.Timeout = -1;
    
            try
            {
                using (var writer = new StreamWriter(req.GetRequestStream(), Encoding.ASCII))
                {
                    writer.WriteLine(bytes);
                }
                using (WebResponse resp = req.GetResponse())
                {
                    using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
                    {
                        result = sr.ReadToEnd().Trim();
                    }
                }
            }
            catch (Exception ex)
            {
                result = ex.Message + "<br />" + ex.InnerException.Message + "<br /><br />" + xml.Replace("<", "&lt;");
            }
    
            ViewBag.result = result;
    

    Am basically wandering if anyone can see anything that might be wrong with the code that could be causing this error or if it's most likely I problem on the their end? Have tried running on my localhost, our live server and my own private server (with a completely different IP) and still get same result.

    Any ideas?

  • Matt Welch
    Matt Welch over 7 years
    Web service I had been hitting successfully for 2 years suddenly stopped working on Friday. This turned out to be the solution. Web host disabled TLS 1.0 at 4pm on Friday with no warning.
  • denvercoder9
    denvercoder9 almost 7 years
    My code was working with unit tests but failed once hosted by IIS/IIS Express. This fixed it.
  • Rufus Buschart
    Rufus Buschart almost 7 years
    This was really, really helpful. In our company they turned off everything except TLS1.2
  • vibs2006
    vibs2006 almost 6 years
    it also fixed my problem :) My host API also stopped working suddenly. Looks like he upgraded his TLS version too.
  • Suhas Dhongade
    Suhas Dhongade about 5 years
    mine too in 2019 :)
  • Matt Kemp
    Matt Kemp about 3 years
    here's what TLS versions different .NET versions support: stackoverflow.com/a/59687552/631277