У меня есть следующий код:
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)
Не закрывайте поток перед чтением. Это должно работать:
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();
}
}
}
}
Добавление этой строки кода решило проблему для меня:
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 -Отправить