У меня есть серверное приложение, и иногда, когда клиент пытается подключиться, я получаю следующую ошибку:
ПРИМЕЧАНИЕ. «Не удалось получить поток от клиента или не удалось войти в систему» - это текст, добавленный мной в инструкции catch.
и строка, на которой он останавливается (sThread: строка 96):
tcpClient = (TcpClient)client;
clientStream = tcpClient.GetStream();
sr = new StreamReader(clientStream);
sw = new StreamWriter(clientStream);
// line 96:
a = sr.ReadLine();
Что может быть причиной этой проблемы? Обратите внимание, что это происходит не все время
источник
Я получил эту ошибку при вызове веб-сервиса. Проблема также была связана с безопасностью транспортного уровня. Я мог бы вызвать веб-службу через проект веб-сайта, но при повторном использовании того же кода в тестовом проекте я бы получил WebException, содержащий это сообщение. Добавление следующей строки перед вызовом решило проблему:
редактировать
Я считаю, что
SecurityProtocol
конфигурация важна во время рукопожатия TLS при выборе версии протокола.источник
В моем конкретном случае для службы приложений Azure минимальная версия TLS была изменена на 1.2.
Я не знаю, будет ли это по умолчанию с этого момента, но вернув его к 1.0, все заработало.
Вы можете получить доступ к настройке в «Настройках SSL».
источник
Не уверен, какое из исправлений в этих сообщениях в блоге помогло, но один из них решил эту проблему для меня ...
http://briancaos.wordpress.com/2012/07/06/unable-to-read-data-from-the-transport-connection-the-connection-was-closed/
Уловка, которая мне помогла, заключалась в том, чтобы отказаться от использования WebRequest и вместо этого использовать HttpWebRequest. HttpWebRequest позволяет мне играть с 3 важными настройками:
и
http://briancaos.wordpress.com/2012/06/15/an-existing-connection-was-forcible-closed-by-the-remote-host/
источник
Вызовы HTTPS-сервисов с одного из наших серверов также вызывали исключение « Невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто ». Однако служба HTTP работала нормально. Использовал Wireshark, чтобы убедиться, что это был сбой установления связи TLS. Оказалось, что необходимо обновить набор шифров на сервере.
источник
Согласно ответам "Ганса Вонна".
Добавление следующей строки перед вызовом решило проблему:
После добавления протокола безопасности и нормальной работы, но я должен добавлять его перед каждым вызовом API, который не работает. Я просто обновляю версию .NET Framework не ниже 4.6 и работаю так, как ожидалось, не требует добавления перед каждым вызовом API.
источник
Это не поможет при периодически возникающих проблемах, но может быть полезно другим людям с подобной проблемой.
Я клонировал виртуальную машину и запустил ее в другой сети с новым IP-адресом, но не изменил привязки в IIS. Fiddler показывал мне «Невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом», а IE сообщал мне: «Включите TLS 1.0, TLS 1.1 и TLS 1.2 в дополнительных настройках». Изменение привязки к новому IP-адресу решило эту проблему.
источник
По какой-то причине пропало соединение с сервером. Возможно, сервер явно закрыл соединение, или ошибка на сервере привела к его неожиданному закрытию. Или что-то между клиентом и сервером (коммутатор или маршрутизатор) разорвало соединение.
Причиной проблемы может быть серверный код, а может и нет. Если у вас есть доступ к коду сервера, вы можете добавить туда отладку, чтобы сообщить вам, когда клиентские соединения закрываются. Это может дать вам некоторое представление о том, когда и почему обрываются соединения.
На клиенте вы должны написать свой код, чтобы учесть возможность отказа сервера в любой момент. Так оно и есть: сетевые соединения по своей сути ненадежны.
источник
Это решило мою проблему. Я добавил эту строку перед отправкой запроса:
Похоже, что на пути к серверу был прокси, который не поддерживал поведение 100-continue.
источник
Я сталкивался с этой проблемой в прошлом. Я использую PostgreSQL, и когда я запускаю свою программу, иногда она подключается, а иногда выдает такую ошибку.
Когда я экспериментирую со своим кодом, я помещаю свой код подключения в самую первую строку под общедоступной формой. Вот пример:
ПЕРЕД:
СЕЙЧАС:
Я думаю, что программа должна сначала прочитать соединение, прежде чем что-то делать, не знаю, поправьте меня, если я ошибаюсь. Но согласно моим исследованиям, это не проблема кода - на самом деле это была проблема самой машины.
Удачного кодирования!
источник
Эта проблема иногда возникает из-за того, что прокси-сервер реализован на веб-сервере. Чтобы обойти прокси-сервер, поместив эту строку перед вызовом службы отправки.
источник
У меня было запущено стороннее приложение (Fiddler), чтобы попытаться увидеть отправленные запросы. Закрытие этого приложения исправило это для меня
источник
У нас была очень похожая проблема, когда веб-сайт клиента пытался подключиться к нашей службе веб-API и получал то же сообщение. Это начало происходить совершенно неожиданно, когда на сервере, где работал IIS, не было изменений кода или обновлений Windows.
В нашем случае выяснилось, что вызывающий веб-сайт использует версию .Net, которая поддерживает только TLS 1.0, и по какой-то причине сервер, на котором работал наш IIS, остановился, похоже, перестал принимать вызовы TLS 1.0. Чтобы диагностировать это, нам пришлось явно включить TLS через реестр на сервере IIS, а затем перезапустить этот сервер. Это ключи реестра:
В моем ответе на другой вопрос есть этот сценарий PowerShell, который мы использовали для добавления записей:
ПРИМЕЧАНИЕ. Включение старых протоколов безопасности - не очень хорошая идея, правильным ответом в нашем случае было заставить веб-сайт клиента обновить свой код для использования TLS 1.2, но записи реестра выше могут помочь в первую очередь диагностировать проблему.
источник
Причина, по которой это происходило со мной, заключалась в том, что у меня была рекурсивная зависимость в моем провайдере DI. В моем случае у меня было:
Исправление заключалось в том, чтобы просто удалить регистрацию службы второй области
источник
Если у вас есть сертификат https в домене, убедитесь, что у вас есть привязка https к имени домена в IIS. В IIS -> Выберите свой домен -> Нажмите "Привязки". Откроется окно "Привязки к сайту". Добавьте привязку для https.
источник
Была аналогичная проблема и возникали следующие ошибки в зависимости от того, какое приложение я использовал, и если мы обошли брандмауэр / балансировщик нагрузки или нет:
и
Проблема оказалась в том, что сертификат SSL-сервера был пропущен и не был установлен на паре серверов.
источник
Попробуйте в первую очередь проверить, можете ли вы установить рукопожатие. У меня была эта проблема раньше при загрузке файла, и я понял, что проблема заключается в несуществующем маршруте, когда я удалил загрузку и проверил, может ли он войти в систему с учетом параметров.
источник
Другой вариант - проверить код ошибки, сгенерированный с помощью блока try-catch, и сначала перехватить WebException.
В моем случае код ошибки был «SendFailure» из-за проблемы с сертификатом на URL-адресе HTTPS, как только я нажимаю HTTP, эта проблема решается.
https://docs.microsoft.com/en-us/dotnet/api/system.net.webexceptionstatus?redirectedfrom=MSDN&view=netframework-4.8
источник
Для меня это была проблема, когда в привязке IIS был IP-адрес веб-сервера. Я изменил его, чтобы использовать все неназначенные IP-адреса, и мое приложение начало работать.
источник
Я столкнулся с ошибкой при запуске python clr mdx-запроса к аналитическим службам Microsoft с использованием adomd
Я решил это с помощью Ханса Вонна, и вот версия на питоне :
источник
Для тех, кто может найти это позже, после .NET версии 4.6, я тоже столкнулся с этой проблемой.
Убедитесь, что вы проверили файл web.config на наличие следующих строк:
Если вы используете 4.6.x или более позднюю версию .NET на сервере, убедитесь, что вы настроили эти значения targetFramework в соответствии с версией платформы на вашем сервере. Если ваши версии меньше 4.6.x, то я бы порекомендовал вам обновить .NET и использовать более новую версию, если ваш код не зависит от более старой версии (что в этом случае вам следует подумать об обновлении).
Я изменил targetFrameworks на 4.7.2, и проблема исчезла:
Новые платформы решают эту проблему, используя лучший из доступных протоколов и блокируя небезопасные или устаревшие. Если удаленная служба, к которой вы пытаетесь подключиться или вызываете, выдает эту ошибку, возможно, они больше не поддерживают старые протоколы.
источник