C #: System.Net.WebException: базовое соединение было закрыто

2

У меня есть следующий код:

String url = // a valid url
String requestXml = File.ReadAllText(filePath);//opens file , reads all text and closes it
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = new NetworkCredential("DEFAULT\\Admin", "Admin"); 
request.ContentType = "application/xml";
request.ContentLength = bytes.Length;
request.Method = "POST";
request.KeepAlive = false;
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
return new StreamReader(responseStream).ReadToEnd();

Во время выполнения я получаю следующее исключение при попытке прочитать HTTPWebResponse:

System.Net.WebException: базовое соединение было закрыто: произошла непредвиденная ошибка при получении.
---> System.IO.IOException: невозможно прочитать данные из транспортного соединения: установленное соединение было прервано программным обеспечением вашего хост-компьютера.
---> System.Net.Sockets.SocketException: установленное соединение было прервано программным обеспечением вашей хост-машины
в System.Net.Sockets.Socket.Receive (байт [] буфер, смещение Int32, размер Int32, сокет SocketFlags socketFlags)
в System.Net.Sockets.NetworkStream.Read (буфер байта [], смещение Int32, размер Int32)
в System.Net.Sockets.NetworkStream.Read (буфер байта [], смещение Int32, размер Int32)
в System.Net.PooledStream.Read (буфер Byte [], смещение Int32, размер Int32)
в System.Net.Connection.SyncRead (запрос HttpWebRequest, логический элемент UserRetrievedStream, Boolean probeRead)

  • 0
    stackoverflow.com/questions/21728773/...
  • 0
    @ w0051977 Я уже видел эту тему, я уже устанавливаю request.keepAlive = false. Так нужно ли переопределять метод GetWebRequest (Uri uri)?
Показать ещё 1 комментарий
Теги:
rest
http

2 ответа

2
Лучший ответ

Не закрывайте поток перед чтением. Это должно работать:

String url = // a valid url
String requestXml = File.ReadAllText(filePath);//opens file , reads all text and closes it
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = new NetworkCredential("DEFAULT\\Admin", "Admin"); 
request.ContentType = "application/xml";
request.ContentLength = bytes.Length;
request.Method = "POST";
request.KeepAlive = false;
using (Stream requestStream = request.GetRequestStream())
{
    requestStream.Write(bytes, 0, bytes.Length);
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
        using (Stream responseStream = response.GetResponseStream())
        {
            using (StreamReader streamReader = new StreamReader(responseStream))
            {
                return streamReader.ReadToEnd();
            }
        }
    }
}
1

Добавление этой строки кода решило проблему для меня:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Это было взято из: https://our.umbraco.com/forum/using-umbraco-and-getting-started/74628- the-underlying-connection- was-closed- an-unexpected-error-occurred-on-a -Отправить

Ещё вопросы

Сообщество Overcoder
Наверх
Меню