158 votes

Impossible de lire les données de la connexion de transport : une connexion existante a été fermée de force par l'hôte distant

J'ai une application serveur et parfois, lorsque le client essaie de se connecter, j'obtiens l'erreur suivante :

entrez la description de l'image ici

REMARQUE : le « impossible d'obtenir le flux du client ou la connexion a échoué » est un texte que j'ai ajouté dans la déclaration catch

et la ligne à laquelle il s'arrête ( sThread : ligne 96 ) est :

 tcpClient = (TcpClient)client;
clientStream = tcpClient.GetStream();
sr = new StreamReader(clientStream);
sw = new StreamWriter(clientStream);

// line 96:                 
a = sr.ReadLine();

Qu'est-ce qui peut causer ce problème ? Attention ça n'arrive pas tout le temps

39voto

Hugo Hilário Points 515

Mon scénario de cas spécifique était que le service d'application Azure avait la version minimale de TLS changée en 1.2

Je ne sais pas si c'est la valeur par défaut à partir de maintenant, mais le ramener à 1.0 l'a fait fonctionner.

Vous pouvez accéder au paramètre dans "Paramètres SSL".

23voto

Mahi Uddin Points 539

D'après les réponses de "Hans Vonn".

L'ajout de la ligne suivante avant de passer l'appel a résolu le problème :

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

Après avoir ajouté le protocole de sécurité et fonctionné correctement, je dois ajouter avant chaque appel d'API ce qui n'est pas sain. Je viens de mettre à niveau la version .net framework au moins 4.6 et fonctionner comme prévu ne nécessite pas d'ajouter avant chaque appel d'API.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X