Использование HttpWebRequest через SSL (HTTPS) [дубликат]

как насчет конкатенации:

String oTime = myTimeSpan.ToString("h") + "h " +
               myTimeSpan.ToString("m") + "m " +
               myTimeSpan.ToString("s") + "s "

UPDATE 1:

Вы можете избежать этого с помощью одиночной кавычки: h'h 'm'm 's's'

57
задан Luke Girvin 23 May 2017 в 14:58
поделиться

12 ответов

Эта ошибка обычно означает, что целевая машина запущена, но служба, к которой вы пытаетесь подключиться, недоступна.

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

Если соединение с машиной недоступно, вы увидите другую ошибку , Я забыл, что это такое, но это по строкам «Service Unreachable» или «Unavailable».

Редактировать - добавлено

Возможно, это вызвано блокировкой брандмауэра порт, но, учитывая, что вы говорите, что это прерывистый («иногда, когда клиент пытается подключиться»), это очень маловероятно. Я не включал это изначально, потому что я решил это умственно, прежде чем ответить.

36
ответ дан David 15 August 2018 в 16:45
поделиться
  • 1
    дело в том, что при запуске сервера есть около 50 клиентов, подключающихся к моему серверу. Я принял вид сигнала ожидания при приеме клиента .. что-то вроде while (Program.waitToFinishLoginAtClient == true & amp; & amp; ajutor & lt; 30) {Thread.Sleep (300); ajutor ++; } client = this.tcpListener.AcceptTcpClient (); Program.waitToFinishLoginAtClient = true; ........... и Program.waitToFinishAtClient изменяется в потоке, который содержит клиент – Alex 24 March 2011 в 15:59
  • 2
    может ли это «ждать»? быть проблемой? – Alex 24 March 2011 в 16:02
  • 3
    Должен ли я просто позволить? Нет, подождите ? – Alex 24 March 2011 в 16:03
  • 4
    Я думаю, что это проблема. Я не знаю достаточно вашего кода, чтобы быть уверенным, но это наверняка кажется вероятным. Просто любопытно, строили ли вы свое собственное обслуживание «жесткий путь», или если вы используете WCF или даже Remoting для этого ... – David 24 March 2011 в 16:07
  • 5
    Основываясь на небольшом количестве кода здесь, он выглядит как «wait». проблему можно было бы избежать, если бы она была внутри отдельного потока для каждого соединения. На всякий случай, если это правильно, вот пример многопоточной службы TCP с многопоточным доступом, которая может вам помочь: switchonthecode.com/tutorials/… – David 24 March 2011 в 16:10

Я получил эту ошибку при вызове веб-сервиса. Эта проблема также была связана с безопасностью транспортного уровня. Я мог бы вызвать веб-сервис через проект веб-сайта, но при повторном использовании одного и того же кода в тестовом проекте я получил бы WebException, содержащее это сообщение. Добавив следующую строку перед тем, как решить проблему, проблема:

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

Изменить

System.Net.ServicePointManager.SecurityProtocol - это свойство выбирает версию протокола Secure Sockets Layer (SSL) или Transport Layer Security (TLS) для использования для новых подключений, использующих только протокол Secure Hypertext Transfer Protocol (HTTPS); существующие соединения не изменяются.

Я считаю, что конфигурация SecurityProtocol важна во время установления связи TLS при выборе версии протокола.

TLS handshake - этот протокол используется для обмена всей информацией, необходимой обеим сторонам для обмена фактическими данными приложения с помощью TLS.

ClientHello - клиент отправляет сообщение ClientHello с указанием самой высокой версии протокола TLS, которую он поддерживает ...

ServerHello - сервер отвечает сообщением ServerHello, содержащим выбранную версию протокола ... Выбранная версия протокола должна быть самым высоким, что и клиентская, и серверная поддержка. Например, если клиент поддерживает TLS версии 1.1, а сервер поддерживает версию 1.2, следует выбрать версию 1.1; версия 1.2 не должна быть выбрана.

73
ответ дан Hans Vonn 15 August 2018 в 16:45
поделиться
  • 1
    это спасло меня! Спасибо чувак. в моем отладчике я пытаюсь вызвать службу https во время тестирования и имел проблему, которую имел OP. – Blair Holmes 8 May 2017 в 16:17
  • 2
    Нет проблем. Рад помочь. Люди часто помогали мне в stackoverflow, поэтому я знаю, что вы имеете в виду. – Hans Vonn 3 July 2017 в 11:13
  • 3
    Знаем ли мы больше о том, как / почему это работает? Я борется с вызовом PostAsync, и это тоже исправляет мою ошибку. Рад, что это сработало, но я также хотел бы знать, почему. – Kevin Matlock 17 August 2017 в 15:57
  • 4
    @HansVonn Спасибо за это! Сэкономил мне массу времени - Что касается того, почему это работает Это просто ограничение версии TLS, которую вы используете при подключении. – confusedandamused 21 August 2017 в 14:31
  • 5
    Святое дерьмо, я не знал, что ты можешь одновременно включить все три. Я запускаю скрипт, который извлекает информацию со всех сторон, и я продолжал переключаться туда и обратно. Спасибо чувак! – JasonBluefire 10 February 2018 в 18:00

Моим конкретным сценарием было то, что у службы приложений Azure была минимальная версия TLS, измененная на 1.2

. Я не знаю, является ли это по умолчанию с этого момента, но изменение его обратно на 1.0 заставило его работать .

Вы можете получить доступ к настройке внутри «Настройки SSL».

7
ответ дан Hugo Hilário 15 August 2018 в 16:45
поделиться
  • 1
    О, мой бог, СПАСИБО! Я застрял в этом для sooo long, и я проверил настройки SSL для веб-приложения, и минимум был установлен в 1.2 вместо 1.0. Когда я изменил его на 1.0 и перезапустил веб-приложение, он сработал! Спасибо огромное! – Mason 2 August 2018 в 06:19
  • 2
    Большое спасибо, @ hugo-hilário, удивительно, что это сработало и для меня! Как вам удалось найти такое сложное решение! : D – hosjay 13 August 2018 в 02:19
  • 3
    @hosjay это было для меня адом :) – Hugo Hilário 14 August 2018 в 10:27

По какой-то причине соединение с сервером было потеряно. Возможно, сервер явно закрыл соединение, или ошибка на сервере вызвала его неожиданное закрытие. Или что-то между клиентом и сервером (коммутатором или маршрутизатором) удалило соединение.

Это может быть код сервера, который вызвал проблему, и может быть и не так. Если у вас есть доступ к серверному коду, вы можете поместить некоторую отладочную информацию, чтобы сообщить вам, когда клиентские соединения закрыты. Это может дать вам некоторое представление о том, когда и почему соединения удаляются.

На клиенте вам нужно написать свой код, чтобы учесть возможность сбоя сервера в любое время. Так оно и есть: сетевые соединения по своей сути ненадежны.

2
ответ дан Jim Mischel 15 August 2018 в 16:45
поделиться

Вызовы к службам HTTPS с одного из наших серверов также бросали сообщение «Невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто». Однако HTTP-сервис работал нормально. Использовал Wireshark, чтобы убедиться, что это был отказ от подтверждения TLS. Закончилось то, что набор шифров на сервере необходимо обновить.

7
ответ дан Jobrocol 15 August 2018 в 16:45
поделиться
  • 1
    Это то, что происходило со мной. A отправил сертификат с истекшим сроком действия в SSL-соединение. Обновите сертификат и отработайте. – Guilherme de Jesus Santos 13 September 2016 в 19:14

У меня было приложение сторонней стороны (Fiddler), чтобы попытаться просмотреть отправленные запросы. Закрытие этого приложения зафиксировало это для меня

0
ответ дан Johan Aspeling 15 August 2018 в 16:45
поделиться

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

Я клонировал виртуальную машину и запустил ее в другой сети с новым IP-адресом, но не изменил привязки в IIS. Fiddler показывал мне «Невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом», и IE сказал мне «Включите TLS 1.0, TLS 1.1 и TLS 1.2 в дополнительных настройках». Изменение привязки к новому IP-адресу решило его для меня.

2
ответ дан Jon.Mozley 15 August 2018 в 16:45
поделиться
  • 1
    Спасибо Спасибо! Моя настройка была совершенно иной, но проблема была также связана с TLS. – Chris Gillum 20 May 2016 в 22:20

Я получаю эту проблему в прошлом. Я использую PostgreSQL, и когда я запускаю свою программу, иногда она подключается, и иногда она выдает такую ​​ошибку.

Когда я экспериментирую с моим кодом, я помещаю свой код подключения в первую строку ниже публичная форма. Вот пример:

ПЕРЕД:

    public Form1()
        {
        //HERE LIES SOME CODES FOR RESIZING MY CONTROLS DURING RUNTIME
        //CODE
        //CODE AGAIN
        //ANOTHER CODE
        //CODE NA NAMAN
        //CODE PA RIN!





        //Connect to Database to generate auto number
        NpgsqlConnection iConnect = new NpgsqlConnection("Server=localhost;Port=5432;User ID=postgres;Password=pass;Database=DB");
        iConnect.Open();
        NpgsqlCommand iQuery = new NpgsqlCommand("Select * from table1", iConnect);
        NpgsqlDataReader iRead = iQuery.ExecuteReader();
        NpgsqlDataAdapter iAdapter = new NpgsqlDataAdapter(iQuery);

        DataSet iDataSet = new DataSet();
        iAdapter.Fill(iDataSet, "ID");

        MessageBox.Show(iDataSet.Tables["ID"].Rows.Count.ToString());
        }

СЕЙЧАС:

    public Form1()
        {
        //Connect to Database to generate auto number
        NpgsqlConnection iConnect = new NpgsqlConnection("Server=localhost;Port=5432;User ID=postgres;Password=pass;Database=DB");
        iConnect.Open();
        NpgsqlCommand iQuery = new NpgsqlCommand("Select * from table1", iConnect);
        NpgsqlDataReader iRead = iQuery.ExecuteReader();
        NpgsqlDataAdapter iAdapter = new NpgsqlDataAdapter(iQuery);

        DataSet iDataSet = new DataSet();
        iAdapter.Fill(iDataSet, "ID");

        MessageBox.Show(iDataSet.Tables["ID"].Rows.Count.ToString());





        //HERE LIES SOME CODES FOR RESIZING MY CONTROLS DURING RUNTIME
        //CODE
        //CODE AGAIN
        //ANOTHER CODE
        //CODE NA NAMAN
        //CODE PA RIN!

        }

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

Happy Coding!

2
ответ дан LoudSpeaker 15 August 2018 в 16:45
поделиться

Это решило мою проблему. Я добавил эту строку до того, как будет сделан запрос:

System.Net.ServicePointManager.Expect100Continue = false;

Казалось, что существует прокси-сервер на сервере, который не поддерживает поведение 100-continue.

0
ответ дан Mahdi Ataollahi 15 August 2018 в 16:45
поделиться

Не знаю, какие из исправлений в этих блогах помогли, но один из них отсортировал эту проблему для меня ...

http://briancaos.wordpress.com/2012/07 / 06 / невозможно для чтения-данных-из-транспорта-соединения-the-connection-was-closed /

и

http : //briancaos.wordpress.com/2012/06/15/an-existing-connection-was-forcibly-closed-by-the-remote-host/

13
ответ дан SteveC 15 August 2018 в 16:45
поделиться
  • 1
    Этот ответ решил эту же проблему для меня. Я отключил «Keep Alive» в разделе заголовков Http в IIS7 – drzounds 21 April 2016 в 12:46
  • 2
    Я должен добавить, что мне также пришлось добавить этот код в Reference.cs для веб-службы, которая имела такое поведение. защищенное переопределение System.Net.WebRequest GetWebRequest (Uri uri) {System.Net.HttpWebRequest webRequest = (System.Net.HttpWebRequest) base.GetWebRequest (uri); webRequest.KeepAlive = false; return webRequest; } – drzounds 21 April 2016 в 14:56
System.Net.ServicePointManager.Expect100Continue = false;

Эта проблема возникает из-за причины прокси-сервера, реализованного на веб-сервере. Чтобы обойти прокси-сервер, поместив эту строку перед вызовом службы отправки.

0
ответ дан Tahir Alvi 15 August 2018 в 16:45
поделиться
0
ответ дан tomRedox 5 September 2018 в 15:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: