Меню

Базовое соединение закрыто непредвиденная ошибка при передаче sharpdevelop

I’m writing a .NET application which is supposed to post data to another .NET application.
I use the following code to request the login page

WebProxy proxy = new WebProxy("http://proxy:80/", true);
HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;
//proxy.Credentials = new NetworkCredential("myusername", "mypassword", "domain"); 
// webRequest.Proxy = proxy;
webRequest.Proxy = WebRequest.DefaultWebProxy;

StreamReader responseReader = new StreamReader
                                  (webRequest.GetResponse().GetResponseStream());
string responseData = responseReader.ReadToEnd();

but it fails on this line

StreamReader responseReader = new StreamReader
                                  (webRequest.GetResponse().GetResponseStream());

with the error message :

System.Net.WebException: The underlying connection was closed: The connection was 
                         closed unexpectedly.

SteveC's user avatar

SteveC

15.2k23 gold badges98 silver badges173 bronze badges

asked Sep 22, 2009 at 11:19

Kwah009's user avatar

5

In my case, this solved the problem:

System.Net.ServicePointManager.Expect100Continue = false;

and none of the above.

SuleymanSah's user avatar

SuleymanSah

16.1k5 gold badges31 silver badges50 bronze badges

answered Oct 6, 2012 at 23:40

Ivan Ičin's user avatar

Ivan IčinIvan Ičin

9,3645 gold badges36 silver badges52 bronze badges

2

I encountered the same exception a while ago and I remember that this happens in some cases due to a bug in .NET. You can work around this by setting the Timeout and ReadWriteTimeout of the request to higher values, or set KeepAlive to false.

This would only be a workaround, though, so I suggest you try to find the actual root cause before assuming anything.

I’ll try to come up with some web references, in the mean time, look at
Big files uploading (WebException: The connection was closed unexpectedly)

Community's user avatar

answered Sep 22, 2009 at 11:38

Rik's user avatar

RikRik

28.2k14 gold badges49 silver badges67 bronze badges

1

Seems like to possible issues:

  1. You never assign the proxy you create to your HttpWebRequest

    WebProxy **proxy** = new WebProxy("http://proxy:80/", true);
    HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;
    //proxy.Credentials = new NetworkCredential("myusername", "mypassword", "domain"); 
    // webRequest.Proxy = proxy;
    webRequest.Proxy = **WebRequest.DefaultWebProxy**;
    

    You should assign it like this:

    WebProxy proxy = new WebProxy("http://proxy:80/", true);
    HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;
    webRequest.Proxy = proxy;
    

    (notice the difference in the last line).

  2. You use port 80 on your proxy. Sure that is correct? Many proxies use port 8080.

Malachi's user avatar

Malachi

3,2064 gold badges28 silver badges46 bronze badges

answered Dec 4, 2009 at 11:37

Erik A. Brandstadmoen's user avatar

2

I had this issue once. My virus protection was the culprit.

answered May 29, 2015 at 15:59

Dan Gifford's user avatar

Dan GiffordDan Gifford

8791 gold badge8 silver badges33 bronze badges

Faced the same error for using http GET for an API that used https. Might be of help to someone.

answered Jun 28, 2021 at 6:15

Jehan Perera's user avatar

In my case I needed to setup proxy settings to allow not only HTTP but HTTPS on the same port as well, because one of requests was sent by HTTPS protocol.

answered Apr 15, 2014 at 20:49

dred17's user avatar

dred17dred17

1392 silver badges17 bronze badges

It was different case for me. Query was taking too long hence connection was timing out. There are five timeouts in WCF
1. Send Timeout — Default 1 min
2. Receive Timeout — Default 1 min
3. Open Timeout — Default 1 min
4. Close Timeout — Default 1 min
5. Inactivity Timeout- Default 10 min

I had set Send and Receive time out correctly but problem was due inactivity timeout as query was too long on server, WCF Service was closing channel hence it was failing to transmit back the response.
Hope this helps if you are using WCF to get response from server which takes long time to run.

answered May 8, 2015 at 15:31

Softec's user avatar

SoftecSoftec

1,05711 silver badges14 bronze badges

myHttpWebRequest.Credentials = CredentialCache.DefaultCredentials;

this is the solution

animuson's user avatar

animuson

53.2k28 gold badges142 silver badges147 bronze badges

answered Jun 30, 2010 at 13:09

Mak's user avatar

I’m writing a .NET application which is supposed to post data to another .NET application.
I use the following code to request the login page

WebProxy proxy = new WebProxy("http://proxy:80/", true);
HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;
//proxy.Credentials = new NetworkCredential("myusername", "mypassword", "domain"); 
// webRequest.Proxy = proxy;
webRequest.Proxy = WebRequest.DefaultWebProxy;

StreamReader responseReader = new StreamReader
                                  (webRequest.GetResponse().GetResponseStream());
string responseData = responseReader.ReadToEnd();

but it fails on this line

StreamReader responseReader = new StreamReader
                                  (webRequest.GetResponse().GetResponseStream());

with the error message :

System.Net.WebException: The underlying connection was closed: The connection was 
                         closed unexpectedly.

SteveC's user avatar

SteveC

15.2k23 gold badges98 silver badges173 bronze badges

asked Sep 22, 2009 at 11:19

Kwah009's user avatar

5

In my case, this solved the problem:

System.Net.ServicePointManager.Expect100Continue = false;

and none of the above.

SuleymanSah's user avatar

SuleymanSah

16.1k5 gold badges31 silver badges50 bronze badges

answered Oct 6, 2012 at 23:40

Ivan Ičin's user avatar

Ivan IčinIvan Ičin

9,3645 gold badges36 silver badges52 bronze badges

2

I encountered the same exception a while ago and I remember that this happens in some cases due to a bug in .NET. You can work around this by setting the Timeout and ReadWriteTimeout of the request to higher values, or set KeepAlive to false.

This would only be a workaround, though, so I suggest you try to find the actual root cause before assuming anything.

I’ll try to come up with some web references, in the mean time, look at
Big files uploading (WebException: The connection was closed unexpectedly)

Community's user avatar

answered Sep 22, 2009 at 11:38

Rik's user avatar

RikRik

28.2k14 gold badges49 silver badges67 bronze badges

1

Seems like to possible issues:

  1. You never assign the proxy you create to your HttpWebRequest

    WebProxy **proxy** = new WebProxy("http://proxy:80/", true);
    HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;
    //proxy.Credentials = new NetworkCredential("myusername", "mypassword", "domain"); 
    // webRequest.Proxy = proxy;
    webRequest.Proxy = **WebRequest.DefaultWebProxy**;
    

    You should assign it like this:

    WebProxy proxy = new WebProxy("http://proxy:80/", true);
    HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;
    webRequest.Proxy = proxy;
    

    (notice the difference in the last line).

  2. You use port 80 on your proxy. Sure that is correct? Many proxies use port 8080.

Malachi's user avatar

Malachi

3,2064 gold badges28 silver badges46 bronze badges

answered Dec 4, 2009 at 11:37

Erik A. Brandstadmoen's user avatar

2

I had this issue once. My virus protection was the culprit.

answered May 29, 2015 at 15:59

Dan Gifford's user avatar

Dan GiffordDan Gifford

8791 gold badge8 silver badges33 bronze badges

Faced the same error for using http GET for an API that used https. Might be of help to someone.

answered Jun 28, 2021 at 6:15

Jehan Perera's user avatar

In my case I needed to setup proxy settings to allow not only HTTP but HTTPS on the same port as well, because one of requests was sent by HTTPS protocol.

answered Apr 15, 2014 at 20:49

dred17's user avatar

dred17dred17

1392 silver badges17 bronze badges

It was different case for me. Query was taking too long hence connection was timing out. There are five timeouts in WCF
1. Send Timeout — Default 1 min
2. Receive Timeout — Default 1 min
3. Open Timeout — Default 1 min
4. Close Timeout — Default 1 min
5. Inactivity Timeout- Default 10 min

I had set Send and Receive time out correctly but problem was due inactivity timeout as query was too long on server, WCF Service was closing channel hence it was failing to transmit back the response.
Hope this helps if you are using WCF to get response from server which takes long time to run.

answered May 8, 2015 at 15:31

Softec's user avatar

SoftecSoftec

1,05711 silver badges14 bronze badges

myHttpWebRequest.Credentials = CredentialCache.DefaultCredentials;

this is the solution

animuson's user avatar

animuson

53.2k28 gold badges142 silver badges147 bronze badges

answered Jun 30, 2010 at 13:09

Mak's user avatar

Здравствуйте!
Помогите понять в чем проблема.
Делаю GET запрос на сайт, используя HttpWebRequest. Запрос не проходит. Возникает WebExeption:
«Базовое соединение закрыто: Непредвиденная ошибка при передаче. System.IO.IOException: Не удается прочитать данные из транспортного соединения: Удаленный хост принудительно разорвал существующее подключение.»
При этом пару недель назад все работало.

C#
1
2
3
4
5
6
7
8
9
10
11
12
            string briefingPath = @"https://www.briefing.com";           
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(briefingPath));
            request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";
            request.ContentType = "application/x-www-form-urlencoded";
            request.Accept = "text/html, application/xhtml+xml, */*";
            request.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru-RU");
            request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
                  
            
 
            HttpWebResponse myHttpWebResponse = (HttpWebResponse)request.GetResponse();
            ...

Добавлено через 15 часов 59 минут
Надо было добавить в код

Добавлено через 26 секунд
Надо был добавить в код

C#
1
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11;

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

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

1 ошибка базовое соединение закрыто: непредвиденная ошибка при передаче.

Ошибка 2 базовое соединение было закрыто: не удалось установить отношения доверия для безопасного канала SSL/TLS.

Ошибка 3 команда » «D:root.из NuGetNuGet для.exe » установить «D:rootpackages — … config «- source «» — неинтерактивный-RequireConsent-solutionDir «D:root «» выход с кодом 1.

Ошибка 4 файла метаданных ‘D:rootproject — … Вебсайт.dll » не удалось найти D:rootproject — … Unit-тестов КБК

Я попробовал решения, представленные на:Visual Studio 2010 nuget ошибка: базовое соединение было закрыто: не удалось установить отношения доверия для безопасного канала SSL/TLS

Я попытался решений по: https://nuget.codeplex.com/discussions/275537

никто из них не работает, мне было интересно, есть ли у кого-нибудь еще эта проблема? Если да, то кто-нибудь придумал решение?

Это, по-видимому, может быть ожидание игры, для SSL-сертификатов, которые будут исправлены.

после некоторой дальнейшей отладки с Fiddler я получил следующий ответ:

скрипач.сеть.https> HTTPS рукопожатие az320820.vo.msecnd.net не удалось. Система.ИО.IOException не удалось прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным узлом.

Если я прав, кажется, что меня отвергают, но сервер, не уверен, почему, и я надеюсь, что это скоро разрешит его самостоятельно.

на данный момент мне удалось получить копии пакетов от других разработчиков, которые не очистили кэш пакетов и продолжить развивается таким образом.

кто-то любезно поднял вопрос о коде plex, поэтому, надеюсь, мы скоро куда-нибудь попадем:https://nuget.codeplex.com/workitem/4372

обновление

по состоянию на 17 ноября, это, кажется, снова работает. NuGet правильно говорит мне, что у него проблемы с получением более старой версии Ninject.Сеть.Общий.3.2.0.0 но у нас есть обновленная версия, которая в порядке.

5 ответов


У меня была такая же проблема, пока я не вызвал своих сетевых администраторов. Мы обнаружили, что наш IPS помечен домен как вредоносное ПО, и мы заблокировали его на уровне нашей внутренней сети.

Как только мы удалили блок, все теперь снова работает.

У нас также были проблемы с получением изображений и css с сайтов проекта codeplex, и это также исправило эту проблему.


Я вижу этот вопрос за корпоративным прокси-сервера с помощью Visual студии 2015, которая использует новые В3 API-интерфейс (https://api.nuget.org/v3/index.json). В моем экземпляре, это связано с поддержкой SSL перехват корпоративного прокси (оживленном), что не знает, как обращаться с новой шифра протокола (например, протокол TLS 1.2, плюс некоторые новые обмен ключами шифра), который обсуждается, что конечную точку API, я считаю.


быстрое исправление для пользователей Visual Studio 2015 заключается в изменении URL-адреса с https на http. У меня такое чувство, что это может не сработать, если пакет имеет файл лицензии https.

или переключитесь на Visual Studio 2013 для установки и обновления пакетов.


проверьте, работает ли подключение к интернету, и ваш прокси-сервер настроен и включен в настройках локальной сети Internet Explorer. В моем случае он пытался загрузить его из интернета и не смог, так как мой прокси был отключен! Надеюсь, это поможет…


введите команду

В Linux
Перед выполнением команды Git выполните в командной строке следующее:

export GIT_TRACE_PACKET=1;export GIT_TRACE=1;export GIT_CURL_VERBOSE=1

На Windows
Перед выполнением команды Git выполните в командной строке следующее:

set GIT_TRACE_PACKET=1 set GIT_TRACE=1 set GIT_CURL_VERBOSE=1

Доброго времени суток, помогите решить проблему : при попытке сделать запрос на сайт sscasino.online дает ошибку xNet.HttpException" в xNet.dll ("Не удалось установить SSL-соединение с HTTP-сервером 'sscasino.online'.") xNet.HttpException (xNET)

и

System.Net.WebException" в System.dll ("Базовое соединение закрыто: Непредвиденная ошибка при передаче.") System.Net.WebException (WebRequest)

request.UserAgent = useragent;
request.IgnoreProtocolErrors = true;
request.SslCertificateValidatorCallback += (sender, certificate, chain, sslPolicyErrors) => true;

var result = request.Get(link);

и

  WebRequest req = WebRequest.Create(Url);
  WebResponse resp = req.GetResponse();
  Stream stream = resp.GetResponseStream();
  StreamReader sr = new StreamReader(stream);
  string Out = sr.ReadToEnd();
  sr.Close();

При этом, если включить http debbuger pro, то запросы идут нормально. Тестил на
нескольких машинах

задан 22 июн 2017 в 8:45

Lolidze's user avatar

3

xNet не будет работать из коробки:

  • xNet основан на SslStream и использует протокол по умолчанию: sslStream.AuthenticateAsClient(address.Host); xNet GitHub
  • протокол SslStreamу должен быть уcтановлен так:
    sslStream.AuthenticateAsClient(address.Host, null, SslProtocols.Tls12, true); MSDN

Два варианта:

  • внести вклад в GitHub xNet с изменением выше
  • cкомпилировать xNet локально с изменением выше

ТАКЖЕ:

Можно попытаться установить протокол по умолчанию где-нибудь вначале (Global.asax -> Startup если есть):

System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;

или

ServicePointManager.SecurityProtocol |= (SecurityProtocolType)3072;

Я не пытался проверить, работает ли этот последний вариант

ответ дан 29 июн 2017 в 17:56

user270576's user avatar

user270576user270576

4814 серебряных знака6 бронзовых знаков

1

Для WebRequest надо было добавить строку ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
Для xNet так и не разобрался

ответ дан 22 июн 2017 в 9:44

Lolidze's user avatar

LolidzeLolidze

1,3701 золотой знак12 серебряных знаков26 бронзовых знаков

Для того чтобы получить контент страницы можно воспользоваться классом HttpClient из библиотеки Microsoft HTTP Client Libraries:

private static async Task<string> GetContentFromPageAsync(string page)
{
    System.Net.ServicePointManager.SecurityProtocol = 
            SecurityProtocolType.Tls12 | 
            SecurityProtocolType.Tls11 | 
            SecurityProtocolType.Tls;

    using (var client = new HttpClient())
    using (var response = await client.GetAsync(page))
    using (var content = response.Content)
    {
         var result = await content.ReadAsStringAsync();
         return result;
    }
}

Использование:

static void Main(string[] args)
{
    var content = GetContentFromPageAsync("https://sscasino.online/").Result;
    Console.WriteLine(content);
}

// Создаем прокси.
var proxyUri = string.Format("{0}:{1}", proxyServerAddress, proxyServerPort);
var proxyCredential = new NetworkCredential(proxyUserName, proxyUserPassword);

var proxy = new WebProxy(proxyUri, false)
{
    UseDefaultCredentials = false,
    Credentials = proxyCredential
};

// Создаем ClientHandler.
HttpClientHandler httpClientHandler = new HttpClientHandler()
{
    Proxy = proxy,
    PreAuthenticate = true,
    UseDefaultCredentials = false,
};

var client = new HttpClient(httpClientHandler);

ответ дан 27 июн 2017 в 11:57

sp7's user avatar

sp7sp7

5,2493 золотых знака18 серебряных знаков37 бронзовых знаков

11

Протоколы HTTP через SSL используют правильно выданный сертификат для проверки.
Можно исползовать делегат RemoteCertificateValidationCallback для проверки SSL-сертификата.

public static void ConnSSL()
{
 WebRequest request = WebRequest.Create(Url);
request.Proxy = null;
request.Credentials = CredentialCache.DefaultCredentials;
//Проверяет  SSL-сертификаты
ServicePointManager.ServerCertificateValidationCallback += new  System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate);

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
}
public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
      return true;
}  

Дополнительная информация о RemoteCertificateValidationCallback

protected override WebRequest GetWebRequest(Uri uri)
{
     HttpWebRequest webRequest = (HttpWebRequest) base.GetWebRequest(uri);
     webRequest.KeepAlive = false;
     return webRequest;
}  

ссылка GetWebRequest

ответ дан 27 июн 2017 в 12:23

Vardan Vardanyan's user avatar

Vardan VardanyanVardan Vardanyan

1,2921 золотой знак13 серебряных знаков29 бронзовых знаков

3

Ошибка ‘Не найдено ни одного сервера с размещенным сервисом’    оглавление    Ошибка ‘Запрос был прерван: Не удалось создать защищенный канал SSL/TLS’.

2022-08-23T15:04:56+00:00

Проблема

Начиная с 13.08.2022 перестали скачиваться исправления (патчи) к конфигурациям с ошибкой:

«The underlying connection was closed: An unexpected error occurred on a send»

или то же самое на русском

«Базовое соединение закрыто: Непредвиденная ошибка при передаче.»

Временное решение

Как временное решение, можно использовать:

  • установку исправлений (патчей) из самой 1С
  • из обновлятора из локальной папки: ссылка

Причина и ход решения

15.08.2022 Предварительно, я полагаю, что у сервиса 1С изменились технические требования к версии протокола шифрования, который используется для соединения (исправления, в отличие от обновлений скачиваются через API соответствующего сервиса 1С). Сегодня (в понедельник) я приступил к решению проблемы — на днях будет новый билд, я напишу о его выходе в соц. сетях (vk, tg) и на этой страничке.

16.08.2022 Да, дело в изменившейся минимальной версии TLS, которую требует сервис 1С для скачивания исправлений. Сегодня, максимум завтра выйдет новая версия обновлятора, где часть кода, ответственная за скачивание исправлений будет вынесена в отдельный исполняемый файл, который для своего выполнения потребует также установленный на компьютере .Net Framework 4.5 (в большинстве современных ОС он уже входит в систему).  Это ещё один довод в пользу запланированного на начало следующего года полного перехода на эту версию фреймворка (сейчас большая часть функционала обновлятора требует только .Net Framework 3.5).

16.08.2022 Вышла версия обновлятора от 16 августа с решением возникшей проблемы. Нажмите кнопку «Скачать новый обновлятор» внизу главного окна уже установленного обновлятора. Восстановлена возможность скачивания исправлений (патчей). Обратите внимание, что для скачивания исправлений (патчей) теперь необходим также установленный .Net Framework 4.5 или выше (он уже предустановлен в большинстве современных ОС). После обновления обновлятора на эту версию сразу проверьте возможность скачивания новых исправлений — если необходимой версии .Net Framework у вас на компьютере нет — обновлятор скажет об этом и даст соответствующую ссылку для установки. На начало 2023 года запланирован полный переход обновлятора на .Net Framework 4.5: ссылка.

23.08.2022 На старых ОС для корректной работы TLS должны быть установлены некоторые обновления, иначе возникает ошибка ‘Не удалось создать защищенный канал SSL/TLS’ или ‘Could not create SSL/TLS secure channel’: подробнее здесь.

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Владимир Милькин

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:

Ошибка ‘Не найдено ни одного сервера с размещенным сервисом’    оглавление    Ошибка ‘Запрос был прерван: Не удалось создать защищенный канал SSL/TLS’.
  • Remove From My Forums
  • Вопрос

  • При настройке WAP возникает ошибка: Базовое соединение закрыто: При попытке установления отношений доверия со службой федерации произошла
    ошибка. Ошибка: Базовое соединение закрыто: Непредвиденная ошибка при передаче.. ADFS установлен и настроен. Сертификат был импортирован с закрытым ключом и содержит 3 имени (имя сервера wap, adfs и имя службы ADFS). Все
    имена серверов используется внутренние. Трафик между хостами полностью разрешен. 
    Может
    кто сталкивался?

Ответы

    • Помечено в качестве ответа

      6 февраля 2017 г. 7:31

  • 1. Для имени AD FS при установке WAP нужно использовать msk-i-ca-adfs.internet.lan — именно это значение прописано в хостовой части URL, идентифицирующего ферму AD FS (Identifier). Хотя, если SNI при связи WAP-AD FS не используется
    (как посмотреть это, я не знаю), может пройти и adfs.internet.lan.

    2. Сертификат Service Communication у вас выглядит сомнительно. Чтобы сертификат был действительным для нескольких имён DNS, они должны быть добавлены в расширение Subject Alternative Name (к сожалению, его в выдаче не видно) ,
    а в Subject Name в части CN=… (Common Name) должно быть указано только одно, основное имя.

    3. Сертификат SSL на сервере AD FS я вообще не увидел. Обычно он совпадает с Service Communication Certificate, но у вас почему-то не так (Thumbprint не совпадает). Так что смотрите на него сами (certutil -dump файл_сертификата). Требования
    там по именам те же: «основное» имя DNS в Common Name из Subject Name, а все остальные (можно — вместе с основным) — в Subject Alternate Name.


    Слава России!

    • Помечено в качестве ответа
      Petko KrushevMicrosoft contingent staff, Moderator
      6 февраля 2017 г. 7:31

Я искал в Google и пробовал все решения, которые мог найти или придумать сам. Сайт, который я пытаюсь загрузить, работает под TLS1.2, как и несколько других сайтов, которые я пытался протестировать, чтобы убедиться, что это не проблема TLS1.2. Остальные сайты загрузились нормально.

byte[] buffer = Encoding.ASCII.GetBytes(
    "mod=www&ssl=1&dest=account_settings.ws"
    + "&username=" + username.Replace(" ", "20%")
    + "&password=" + password.Replace(" ", "20%"));

ServicePointManager.MaxServicePointIdleTime = 1000;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

HttpWebRequest WebReq =
    (HttpWebRequest)WebRequest.Create(
        "https://secure.runescape.com/m=weblogin/login.ws");

WebReq.Method = "POST";
WebReq.KeepAlive = false;

WebReq.Referer =
    "https://secure.runescape.com/m=weblogin/loginform.ws"
    + "?mod=www&ssl=1&expired=0&dest=account_settings.ws";

WebReq.ContentType = "application/x-www-form-urlencoded";
WebReq.ContentLength = buffer.Length;
Stream PostData = WebReq.GetRequestStream();
PostData.Write(buffer, 0, buffer.Length);
PostData.Close();
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
Stream Answer = WebResp.GetResponseStream();
StreamReader _Answer = new StreamReader(Answer);
reply = _Answer.ReadToEnd();
curAccount++;
if (reply.Contains("Login Successful"))
{
     eturn true;
}
else
{
     eturn false;
}

Независимо от того, что я пытаюсь, я получаю исключение

Базовое соединение было закрыто: при отправке произошла непредвиденная ошибка.

Под более подробной информацией я нашел

Ошибка аутентификации, потому что удаленная сторона закрыла транспортный поток.

7 ответов

Лучший ответ

В версии 4.0 платформы .Net ServicePointManager.SecurityProtocol предлагается только два параметра:

  • Ssl3: протокол безопасности Secure Socket Layer (SSL) 3.0.
  • Tls: протокол безопасности Transport Layer Security (TLS) 1.0

В следующем выпуске платформы Перечислитель SecurityProtocolType был расширен новыми протоколами Tls, поэтому, если ваше приложение может использовать версию 4.5, вы также можете использовать:

  • Tls11: указывает протокол безопасности Transport Layer Security (TLS) 1.1.
  • Tls12: указывает протокол безопасности TLS 1.2.

Итак, если вы находитесь в .Net 4.5, измените свою строку

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

К

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Так что ServicePointManager будет создавать потоки, поддерживающие соединения Tls12.

Обратите внимание, что значения перечисления могут использоваться в качестве флагов, поэтому вы можете комбинировать несколько протоколов с помощью логического ИЛИ.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | 
                                       SecurityProtocolType.Tls11 |
                                       SecurityProtocolType.Tls12;

Примечание
Старайтесь, чтобы количество поддерживаемых вами протоколов было как можно меньше и соответствовало современным стандартам безопасности. Протокол Ssll3 больше не считается безопасным, а использование Tls1.0 SecurityProtocolType.Tls сокращается.


104

rene
23 Окт 2017 в 12:40

Я испытал это исключение, и оно также было связано с ServicePointManager.SecurityProtocol.

Для меня это было связано с тем, что для параметра ServicePointManager.SecurityProtocol было установлено значение Tls | Tls11 (из-за того, что некоторые веб-сайты приложение посещает с неработающим TLS 1.2) и после посещения веб-сайта, поддерживающего только TLS 1.2 (проверено с помощью SSLLabs ‘SSL Report), это не удалось.

Вариант для .NET 4.5 и выше — включить все версии TLS:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
                                     | SecurityProtocolType.Tls11
                                     | SecurityProtocolType.Tls12;


16

Simon Shine
5 Май 2017 в 11:46

Для .Net 4 используйте:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)768 | (SecurityProtocolType)3072;


13

Barun
10 Сен 2017 в 20:41

У меня была аналогичная проблема, и приведенная ниже строка помогла мне решить проблему. Спасибо rene. Я просто вставил эту строку над кодом аутентификации, и она сработала.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;


2

aminography
17 Дек 2019 в 06:21

Код для WebTestPlugIn

public class Protocols : WebTestPlugin
{

    public override void PreRequest(object sender, PreRequestEventArgs e)
    {
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

    }

}


1

Bùi Đức Khánh
6 Мар 2018 в 10:15

Ваш проект поддерживает .Net Framework 4.0 и .Net Framework 4.5. Если у вас есть проблемы с обновлением

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Вместо может использовать;

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;


1

Furkan ÇELİKCİ
2 Янв 2020 в 11:53

Включите TL 1.2 из IE и добавьте следующее

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;


0

Kennedy_mukiri
23 Ноя 2020 в 07:04

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ауди 80 б3 ошибка 2342
  • Базироваться на экспериментальные данные ошибка