Aucune connexion n'a pu être établie car la machine cible l'a refusée activement.


260

Parfois, j'obtiens l'erreur suivante pendant que je faisais HttpWebRequest à un WebService. J'ai également copié mon code ci-dessous.


System.Net.WebException: impossible de se connecter au serveur distant ---> System.Net.Sockets.SocketException: aucune connexion n'a pu être établie car la machine cible l'a activement refusée 127.0.0.1:80
   sur System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, SocketAddress socketAddress)
   sur System.Net.Sockets.Socket.InternalConnect (EndPoint remoteEP)
   sur System.Net.ServicePoint.ConnectSocketInternal (Boolean connectFailure, Socket s4, Socket s6, Socket & socket, IPAddress & address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception & exception)
   --- Fin de la trace de la pile des exceptions internes ---
   sur System.Net.HttpWebRequest.GetRequestStream ()

ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.PreAuthenticate = true;
request.Credentials = networkCredential(sla);
request.Method = WebRequestMethods.Http.Post;
request.ContentType = "application/x-www-form-urlencoded";
request.Timeout = v_Timeout * 1000;

if (url.IndexOf("asmx") > 0 && parStartIndex > 0)
{
    AppHelper.Logger.Append("#############" + sla.ServiceName);

    using (StreamWriter reqWriter = new StreamWriter(request.GetRequestStream()))
    {                        
        while (true)
        {
            int index01 = parList.Length;
            int index02 = parList.IndexOf("=");

            if (parList.IndexOf("&") > 0)
                index01 = parList.IndexOf("&");

            string parName = parList.Substring(0, index02);
            string parValue = parList.Substring(index02 + 1, index01 - index02 - 1);

            reqWriter.Write("{0}={1}", HttpUtility.UrlEncode(parName), HttpUtility.UrlEncode(parValue));

             if (index01 == parList.Length)
                 break;

             reqWriter.Write("&");
             parList = parList.Substring(index01 + 1);
         }
     }
 }
 else
 {
     request.ContentLength = 0;
 }

 response = (HttpWebResponse)request.GetResponse();

1
Je viens de me connecter à Azure. Il est assez sûr de dire que la machine cible est disponible. Le problème a persisté après le redémarrage et la réinitialisation du routeur. Bizarre. Problème? Fiddler ne s'était pas arrêté correctement. Le système s'attendait toujours à acheminer le trafic via Fiddler et c'est la «machine cible» qui n'était pas disponible.
Vok

Cela pourrait-il avoir quelque chose à voir avec les sockets utilisées? Les fermez-vous à la sortie?
George Sp

Réponses:


204

Si cela se produit toujours, cela signifie littéralement que la machine existe mais qu'elle n'a aucun service d'écoute sur le port spécifié, ou qu'un pare-feu vous arrête.

Si cela se produit occasionnellement - vous avez utilisé le mot «parfois» - et que la nouvelle tentative réussit, c'est probablement parce que le serveur a un «backlog» complet.

Quand tu attends d'être accept édité sur une prise d'écoute, vous êtes placé dans un backlog. Ce backlog est fini et assez court - des valeurs de 1, 2 ou 3 ne sont pas inhabituelles - et donc le système d'exploitation pourrait ne pas être en mesure de mettre en file d'attente votre demande pour que «l'acceptation» soit consommée.

Le backlog est un paramètre de la listenfonction - tous les langages et plates-formes ont fondamentalement la même API à cet égard, même le C # . Ce paramètre est souvent configurable si vous contrôlez le serveur et est probablement lu à partir de certains fichiers de paramètres ou du registre. Découvrez comment configurer votre serveur.

Si vous avez écrit le serveur, vous pourriez avoir un traitement lourd dans l'acceptation de votre socket, et cela peut être mieux déplacé vers un thread de travail séparé afin que votre acceptation soit toujours prête à recevoir des connexions. Il existe différents choix d'architecture que vous pouvez explorer pour limiter la mise en file d'attente des clients et les traiter séquentiellement.

Peu importe si vous pouvez augmenter le backlog du serveur, vous avez besoin d'une logique de nouvelle tentative dans votre code client pour faire face à ce problème - car même avec un backlog long, le serveur peut recevoir de nombreuses autres demandes sur ce port à ce moment-là.

Il y a une possibilité rare où un routeur NAT donnerait cette erreur si ses ports pour les mappages étaient épuisés. Je pense que nous pouvons ignorer cette possibilité comme trop longue, car le routeur dispose de 64K connexions simultanées à la même adresse / port de destination avant l'épuisement.


Oui, je l'obtiens de temps en temps, pas toujours, je ne pense pas que la raison soit un pare-feu ou autre chose, mais le retard peut être la raison de ce problème. Existe-t-il de toute façon pour résoudre ce problème?
hsnkvk

@hsnkvk; la bonne manière robuste consiste pour le client à avoir une boucle de nouvelle tentative; réponse mise à jour en conséquence
Will

@Volonté; J'ai déjà un iterationCount et je réessaye iterationCount fois s'il échoue. :(
hsnkvk

1
C'est ca le truc. Mal conçu / configuré est plutôt vague comme vous l'avez dit. Par inspection de code, voulez-vous dire que vous souhaitez afficher le code qui appelle le service Web? Je ne l'ai pas posté car c'est exactement le même code que celui qui appelle le premier webservice et celui-ci fonctionne parfaitement. Y a-t-il une propriété sur le serveur qui peut être configurée via web.config qui pourrait affecter la deuxième webapp?
Amith George

9
Le 127.0.0.1:80 suggère que le service Web se trouve sur la machine locale, ce qui rend les problèmes de réseau différents. Ce qui est très similaire, c'est que le service Web a démarré plus lentement que l'application cliente lors des tests. L'ajout d'une logique de nouvelle tentative est certainement la voie à suivre.
Martin Brown

31

La raison la plus probable est un pare-feu.

Cet article contient un ensemble de raisons qui peuvent vous être utiles.

D'après l'article, les raisons possibles pourraient être:

  • Paramètres du serveur FTP
  • Paramètres du logiciel / pare-feu personnel
  • Plusieurs logiciels / pare-feu personnels
  • Logiciel antivirus
  • Couche LSP
  • Micrologiciel du routeur
  • Ordinateur éteint
  • L'ordinateur n'est pas branché
  • Violoneux

9
Je sais que c'est vieux, mais vous pouvez ajouter Fiddler à cette liste. détacher le violon lors du démarrage de l'application, puis le rattacher a fait fonctionner correctement mes sockets.
ps2goat

1
Le pouce levé pour Fiddler
Kalin Krastev

3
J'avais installé un violon sur la machine de développement et cela a causé ce problème, je n'ai pas ouvert de violon lors de l'exécution de ce projet spécifique et j'ai eu l'erreur. Lorsque j'ai ouvert un violoneux lors de l'exécution du projet, cela a fonctionné
Peter PitLock

16

Cela m'est arrivé aussi .. Parfois, lorsque j'ouvre mon projet, cette erreur est apparue, ce qui était frustrant. Le problème était que parfois le numéro de port du service Web changeait de façon inattendue.

Ce problème se produit généralement lorsque vous disposez de plusieurs copies du projet

Mon projet appelait le service Web avec un numéro de port spécifique que j'ai attribué dans le fichier Web.Config de mon fichier de projet principal. Comme le numéro de port a changé de façon inattendue, le navigateur n'a pas pu trouver le service Web et générer cette erreur.

J'ai résolu ce problème en suivant les étapes ci-dessous: (Visual Studio 2010)

Allez dans Propriétés du Web serviceprojet -> cliquez sur l' onglet Web -> dans la section Serveurs -> Vérifier le port spécifique , puis attribuez-lui le nom standard port numberpar lequel votre projet principal appelle le service Web.

J'espère que cela résoudra le problème.

À votre santé :)


2
Ce n'était pas une connaissance commune pour moi. J'ai été confus car diable sur pourquoi mon erreur spécifiée LocalHost:2532pour moi. Il s'avère qu'il a été défini de cette façon par le propriétaire précédent dans la zone que vous avez spécifiée. Maintenant que ce mystère est clair, il rend certaines autres choses moins mystérieuses. Merci!
Suamere

7

Je pense que vous devez vérifier vos paramètres de proxy dans les "options Internet". Si vous utilisez des applications proxy / 'masquer ip', ce problème peut se produire.


Est-ce un problème typique de Windows 7? Certains paramètres par défaut sont-ils différents par rapport aux autres versions de Windows?
Wolf

@ Wolf, je pense que ce n'est pas un problème Windows. mais c'est peut-être un problème de connexion.
isaeid

Allez dans IE -> Options Internet -> onglet Connexions -> Paramètres LAN, décochez "Utiliser un serveur proxy pour votre LAN". Cela a résolu le problème pour moi.
Mike Kuenzi

Dans mon application, j'ai inclus une option proxy (WPAD) car les utilisateurs peuvent en avoir besoin. Je ne. Cependant, je l'ai activé sur mon ordinateur de test, ce qui entraînerait l'échec. Donc, si vous n'avez pas besoin d'utiliser un proxy, vous ne pouvez pas en définir un dans votre application.
tmighty

4

J'ai eu le même problème. Le problème est que je n'ai pas démarré le serveur au sélénium. J'ai téléchargé le serveur sélénium et je l'ai démarré. Après avoir démarré le serveur de sélénium, le problème a disparu et tout a bien fonctionné.

Reportez-vous à ceci: http://coding-issues.blogspot.in/2012/11/no-connection-could-be-made-because.html


1
La question ne mentionne rien sur le serveur au sélénium.
Geoff Dawdy

1
@GeoffDawdy C'est juste un autre exemple pour la raison n ° 1 de la réponse de Will - soutient l'apprentissage par la répétition ;-)
Wolf

4

Accédez à votre projet WCF - propriétés -> la toile-> débogueurs -> décochez la case

Activer l'édition et continuer


10
Qu'est-ce que cela fait?
Wouter Vanherck

3

J'ai eu la même erreur avec mon service WCF en utilisant la liaison Net TCP, mais j'ai résolu après avoir démarré les services ci-dessous dans mon cas.

Net.Pipe.Listener.Adapter

Net.TCP.Listener.Adapter

Service de partage de port Net.Tcp


1
Brillant, je tirais mes cheveux. Note de bas de page: L'exécution de mon service WCF NET.TCP sur un PC Windows 7 ne nécessitait pas l'exécution de ces 3 services. Cependant, en cours d'exécution sur Windows Server (j'ai testé 2003 et 2008), ces services devaient être en cours d'exécution pour que WCF puisse corriger.
smirkingman

3

C'est vraiment spécifique, mais si vous recevez cette erreur après avoir essayé de vous connecter à une base de données à l'aide de mongo, ce qui a fonctionné pour moi était d'exécuter mongod.exe avant d'exécuter mongo.exe, puis la connexion a bien fonctionné. J'espère que cela aide quelqu'un.


3

J'ai rencontré la même erreur car lorsque votre serveur et votre client s'exécutent sur la même machine, le client a besoin d'une adresse IP locale du serveur et non d'une adresse IP publique pour communiquer avec le serveur. dans le programme client pour se connecter au serveur L'adresse IP locale peut être trouvée en utilisant cette méthode.

 public static string Getlocalip()
    {
        try
        {
            IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
            return localIPs[7].ToString();
        }
        catch (Exception)
        {

            return "null";
        }

    }

C'était mon scénario: comme solution alternative, si vous pointez sur un nom d'hôte qui se résout en une IP publique, vous pouvez également modifier le fichier HOST de votre machine serveur et ajouter une règle qui achemine votre nom d'hôte vers 127.0.0.1.
Darkseal

3

J'ai eu cette erreur dans une application qui utilise AppFabric. L'indice obtenait une DataCacheExceptiontrace de pile. Pour voir si c'est le problème pour vous, exécutez la commande PowerShell suivante:

@("AppFabricCachingService","RemoteRegistry") | % { get-service $_ }

Si l'un de ces deux services est arrêté, vous obtiendrez cette erreur.


Merci. En passant, pour référence future à moi-même et aux autres, cela semblait fonctionner lorsque j'ai commencé le service, mais l'application avait toutes sortes de lenteurs et j'ai finalement twigged (d'uh) que le service sur l'autre serveur de l'AppFabric le cluster n'a pas été activé.
Mark

2

Eh bien, j'ai reçu cette erreur aujourd'hui sur Windows 8 64 bits à l'improviste, pour la première fois, et il s'avère que mon my.ini a été réinitialisé, et le fichier bin / mysqld a été supprimé, entre autres éléments dans le "Program Files/MySQL/MySQL Server 5.6"dossier.

Pour y remédier, j'ai dû exécuter à nouveau le programme d'installation MySQL, en installant uniquement le serveur et copier une version récente du fichier my.ini "ProgramData/MySQL/MySQL Server 5.6", nommée my_2014-03-28T15-51-20.inidans mon cas (je ne sais pas comment ni pourquoi cela a été copié là-bas si récemment) retour dans "Program Files/MySQL/MySQL Server 5.6".

Le seul changement au système depuis que MySQL a fonctionné a été l'installation de Traktor 2 de Native Instruments et d'une carte son Traktor Audio 2, ce qui n'aurait vraiment pas dû causer ce problème, et personne d'autre n'a utilisé le système à part moi. Si quelqu'un a un indice, ce serait gentil de votre part de commenter pour empêcher cela pour moi et quiconque a rencontré cela.


J'ai eu le même problème et le hack pour le résoudre consiste à arrêter les services MyQsl via services.msc. Cependant, MySql n'est plus disponible par la suite, vous devez donc redémarrer l'ordinateur pour l'avoir à nouveau.
Gabriel

2

Pour référence de service dans une solution.

  1. Redémarrez votre poste de travail

  2. Reconstruisez votre solution

  3. Mettre à jour la référence du service dans le projet WCFclient

À ce stade, j'ai reçu un message (Windows 7) pour autoriser l'accès au système. Ensuite, la référence de service a été correctement mise à jour sans erreur.


2

Je voudrais partager cette réponse que j'ai trouvée car la cause du problème n'était pas le pare-feu ou le processus n'écoutait pas correctement, c'était l'exemple de code fourni par Microsoft que j'ai utilisé.

https://msdn.microsoft.com/en-us/library/system.net.sockets.socket%28v=vs.110%29.aspx

J'ai implémenté cette fonction presque exactement comme écrit, mais ce qui s'est passé, c'est que j'ai eu cette erreur:

2016-01-05 12: 00: 48,075 [10] ERREUR - L'erreur est: System.Net.Sockets.SocketException (0x80004005): Aucune connexion n'a pu être établie car la machine cible l'a activement refusée [fe80 :: caa: 745: a1da: e6f1% 11]: 4080

Ce code dirait que le socket est connecté, mais pas sous la bonne adresse IP réellement nécessaire pour une communication correcte. (Fourni par Microsoft)

private static Socket ConnectSocket(string server, int port)
    {
        Socket s = null;
        IPHostEntry hostEntry = null;

        // Get host related information.
        hostEntry = Dns.GetHostEntry(server);

        // Loop through the AddressList to obtain the supported AddressFamily. This is to avoid
        // an exception that occurs when the host IP Address is not compatible with the address family
        // (typical in the IPv6 case).
        foreach(IPAddress address in hostEntry.AddressList)
        {
            IPEndPoint ipe = new IPEndPoint(address, port);
            Socket tempSocket = 
                new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            tempSocket.Connect(ipe);

            if(tempSocket.Connected)
            {
                s = tempSocket;
                break;
            }
            else
            {
                continue;
            }
        }
        return s;
    }

J'ai réécrit le code pour utiliser simplement la première adresse IP valide qu'il trouve. Je ne m'inquiète que d'utiliser IPV4, mais cela fonctionne avec localhost, 127.0.0.1, et l'adresse IP de votre carte réseau, où l'exemple fourni par Microsoft a échoué!

    private Socket ConnectSocket(string server, int port)
    {
        Socket s = null;

        try
        {
            // Get host related information.
            IPAddress[] ips;
            ips = Dns.GetHostAddresses(server);

            Socket tempSocket = null;
            IPEndPoint ipe = null;

            ipe = new IPEndPoint((IPAddress)ips.GetValue(0), port);
            tempSocket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            Platform.Log(LogLevel.Info, "Attempting socket connection to " + ips.GetValue(0).ToString() + " on port " + port.ToString());
            tempSocket.Connect(ipe);

            if (tempSocket.Connected)
            {
                s = tempSocket;
                s.SendTimeout = Coordinate.HL7SendTimeout;
                s.ReceiveTimeout = Coordinate.HL7ReceiveTimeout;
            }
            else
            {
                return null;
            }

            return s;
        }
        catch (Exception e)
        {
            Platform.Log(LogLevel.Error, "Error creating socket connection to " + server + " on port " + port.ToString());
            Platform.Log(LogLevel.Error, "The error is: " + e.ToString());
            if (g_NoOutputForThreading == false)
                rtbResponse.AppendText("Error creating socket connection to " + server + " on port " + port.ToString());
            return null;
        }
    }

2

Dans mon cas, certains domaines ont fonctionné, d'autres non. L'ajout d'une référence à l'URL du proxy de mon organisation dans mon web.config a résolu le problème.

<system.net>
    <defaultProxy useDefaultCredentials="true">
      <proxy proxyaddress="http://proxy.my-org.com/" usesystemdefault="True"/>
    </defaultProxy>
</system.net>

1

J'ai reçu cette erreur de référencer des services situés sur un WCFHost de mon niveau Web. Ce qui a fonctionné pour moi peut ne pas s'appliquer à tout le monde, mais je laisse cette réponse à ceux qui le peuvent. Le numéro de port pour mon WCFHost a été mis à jour au hasard par IIS, j'ai simplement dû mettre à jour les routes de fin vers les références svc dans ma configuration Web. Problème résolu.


1

Dans mon scénario, j'ai deux applications:

  • App1
  • App2

Hypothèse : App1 devrait écouter les activités d'App2 sur le port 5000

Erreur : démarrer App1 et essayer d'écouter une ville fantôme inexistante génère l'erreur

Lösung : Démarrez d'abord App2, puis essayez d'écouter en utilisant App1


1

Encore une possibilité -

Assurez-vous que vous essayez d'ouvrir la même adresse IP que celle où vous écoutez. Mon application serveur écoutait l'adresse IP de la machine hôte à l'aide d'IPv6, mais le client tentait de se connecter sur l'adresse IPv4 de la machine hôte.


1

Dans mon cas, cela a été causé par un déploiement défectueux où aucun paramètre dans mon web.config n'a été effectué.

Un collègue a expliqué que l'adresse IP dans le message d'erreur représente l'hôte local.

Lorsque j'ai corrigé le web.config, j'utilisais alors l'URL correcte pour passer les appels du serveur et cela a fonctionné.

J'ai pensé que je publierais ceci au cas où cela pourrait aider quelqu'un.


0

Utilisation de WampServer 64bit sur Windows 7 Home Premium 64bit J'ai rencontré ce problème exact. Après des heures et des heures d'expérimentation, il est devenu évident que tout ce qui était nécessaire était dans my.ini pour commenter une ligne. Ensuite, cela a bien fonctionné.

commenté 1 socket de ligne = mysql

Si vous placez vos anciens / données / fichiers à l'emplacement approprié, WampServer les acceptera tous à l'exception du dossier / mysql / qu'il écrase. J'ai donc simplement importé une sauvegarde des données / mysql / user de mon environnement de développement précédent et exécuté FLUSH PRIVILEGES dans une fenêtre SQL phpMyAdmin. Fonctionne très bien. Quelque chose ne va pas parce que les choses ne devraient pas être aussi faciles.


0

J'ai eu ce problème souvent. J'ai trouvé que le SQL Server Agentservice ne fonctionnait pas. Une fois que j'ai démarré le service manuellement, il a été corrigé. Vérifiez si le service fonctionne ou non:

  1. Exécutez l'invite, tapez services.mscet appuyez sur Entrée
  2. Rechercher le nom du service - SQL Server Agent( Nom de l'instance )

Si SQL Server Agentn'est pas en cours d'exécution, double-cliquez sur le service pour ouvrir la fenêtre des propriétés. Cliquez ensuite sur le Startbouton. J'espère que cela aidera quelqu'un.


Pourquoi l'agent SQL Server aurait-il quelque chose à voir avec IIS? Peut-être que vous vouliez dire le service WWW?
Nick.McDermaid

0

J'ai rencontré cette erreur et j'ai mis du temps à la résoudre. Dans mon cas, j'avais https et net.tcp configurés en tant que liaisons IIS sur le même port. Évidemment, vous ne pouvez pas avoir deux choses sur le même port. J'ai utilisé la commande netstat -ap tcp pour vérifier s'il y a quelque chose à écouter sur ce port. Il n'y avait personne qui écoutait. La suppression de la liaison inutile (https dans mon cas) a résolu mon problème.


0

C'était un problème stupide de mon côté, j'avais ajouté un proxy par défaut à mon web.config afin d'intercepter le trafic dans Fiddler, puis j'ai oublié de le supprimer!


0

Il existe un service appelé «SQL Server Browser» qui fournit des informations de connexion SQL Server aux clients.

Dans mon cas, aucune des solutions existantes n'a fonctionné car ce service n'était pas en cours d'exécution. Je l'ai repris et tout s'est remis à fonctionner parfaitement.


0

J'étais confronté à ce problème aujourd'hui. La mienne était l'API Core d'Asp.Net et elle l'utilise Postgresqlcomme base de données. Nous avons configuré cette base de données en tant que conteneur Docker. La première étape que j'ai faite a donc été de vérifier si je suis en mesure d'accéder à la base de données ou non. Pour ce faire, j'ai cherché PgAdminau début car j'ai configuré la même chose. En cliquant sur l'application résultante, vous serez redirigé vers le http://127.0.0.1:23722/browser/ . Là, vous pouvez essayer d'accéder à votre base de données dans le menu de gauche. Pour moi, j'obtenais une erreur comme dans l'image ci-dessous.

entrez la description de l'image ici

Saisissez le mot de passe et essayez si vous pouvez y accéder ou non. Pour moi, cela ne fonctionnait pas. Comme il s'agit d'un conteneur Docker, j'ai décidé de redémarrer mon bureau Docker, pour cela, faites un clic droit sur l'icône Docker dans la barre des tâches et cliquez sur redémarrer.

Une fois après le redémarrage du Docker, j'ai pu me connecter et voir la base de données et l'erreur a également disparu lorsque je redémarre l'application dans Visual Studio .

J'espère que ça aide.


0

cela peut être dû à des problèmes d'autorisation; ce fut le cas pour moi. Si vous avez par exemple: [Authorize("WriteAccess")]ou [Authorize("ReadAccess")]au sommet des fonctions de votre contrôleur, essayez de les commenter.


0

Pour moi, je voulais démarrer le mongo en shell (sans rapport avec le contexte exact de la question, mais ayant le même message d'erreur avant même de démarrer le mongo en shell)

Le processus 'MongoDB Service' n'était pas en cours d'exécution dans les services

Démarrez cmd en tant qu'administrateur et tapez,

net start MongoDB

Juste pour voir que MongoDB est en place et qu'il suffit de taper mongo, en cmd il donnera les détails de la version de Mongo et l'URL de connexion de Mongo


0

Je viens de faire face à ça en ce moment ...

entrez la description de l'image ici

Ici, de mon côté, j'ai 2 solutions Visual Studio séparées (.sln) ... ouvertes chacune dans leur propre instance Visual Studio.

La solution 2 appelle le code de la solution 1. Le problème était lié au port attribué à la solution 1. J'ai dû changer le port de la solution 1 en un autre, puis la solution 2 a recommencé à fonctionner. Assurez-vous donc de vérifier le port attribué à votre projet.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.