web-dev-qa-db-fra.com

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

J'utilise le modèle WCF4.0 - RESTE . J'essaie de faire une méthode qui télécharge un fichier en utilisant un flux.

Le problème se pose toujours à

Stream serverStream = request.GetRequestStream();

Classe pour le streaming:

namespace LogicClass
{
    public class StreamClass : IStreamClass
    {
        public bool UploadFile(string filename, Stream fileStream)
        {
            try
            {
                FileStream fileToupload = new FileStream(filename, FileMode.Create);
                byte[] bytearray = new byte[10000];
                int bytesRead, totalBytesRead = 0;
                do
                {
                    bytesRead = fileStream.Read(bytearray, 0, bytearray.Length);
                    totalBytesRead += bytesRead;
                } while (bytesRead > 0);

                fileToupload.Write(bytearray, 0, bytearray.Length);
                fileToupload.Close();
                fileToupload.Dispose();
            }
            catch (Exception ex) { throw new Exception(ex.Message); }
            return true;
        }
    }
}

Projet REST:

[WebInvoke(UriTemplate = "AddStream/{filename}", Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
public bool AddStream(string filename, System.IO.Stream fileStream)
{
    LogicClass.FileComponent rest = new LogicClass.FileComponent();
    return rest.AddStream(filename, fileStream);
}

Projet Windows Form: à tester

private void button24_Click(object sender, EventArgs e)
{
    byte[] fileStream;
    using (FileStream fs = new FileStream("E:\\stream.txt", FileMode.Open, FileAccess.Read, FileShare.Read))
    {
        fileStream = new byte[fs.Length];
        fs.Read(fileStream, 0, (int)fs.Length);
        fs.Close();
        fs.Dispose();
    }

    string baseAddress = "http://localhost:3446/File/AddStream/stream.txt";
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(baseAddress);
    request.Method = "POST";
    request.ContentType = "text/plain";
    Stream serverStream = request.GetRequestStream();
    serverStream.Write(fileStream, 0, fileStream.Length);
    serverStream.Close();
    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
    {
        int statusCode = (int)response.StatusCode;
        StreamReader reader = new StreamReader(response.GetResponseStream());
    }
}

J'ai désactivé le pare-feu et ma connexion Internet, mais l'erreur persiste. Existe-t-il un meilleur moyen de tester la méthode de téléchargement?

Trace de la pile:

sur System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, SocketAddress socketAddress) sur System.Net.ServicePoint.ConnectSocketInternal (booléen connectFailure, Socket s6, Socket s6, Socket & socket, IPAddress & address, ConnectSocketState Exception et exception)

67
fiberOptics

"Activement refusé" signifie que l'hôte a envoyé une réinitialisation au lieu d'un accusé de réception lorsque vous avez tenté de vous connecter. Ce n'est donc pas un problème dans votre code. Un pare-feu bloque la connexion ou le processus qui héberge le service n'écoute pas sur ce port. Cela peut être dû au fait qu’il n’exécute pas du tout ou qu’il écoute sur un autre port.

Une fois que vous avez démarré le processus hébergeant votre service, essayez netstat -anb (requiert des privilèges d'administrateur) pour vérifier qu'il est en cours d'exécution et à l'écoute sur le port attendu.

update: Sous Linux, vous devrez peut-être utiliser netstat -anp à la place.

130
Yaur

Vous n'êtes pas obligé de redémarrer le PC. Redémarrez IIS à la place.

Exécuter -> 'cmd' (en tant qu'administrateur) et tapez "iisreset"

12
gradosevic

Vous devez configurer votre proxy système. Vous devez passer par ce chemin controlpanel >> option Internet >> connexion >> paramètres LAN >> proxy no tik: utiliser un serveur proxy

2
paiam sahari

J'ai reçu un message d'erreur similaire, tel que code d'erreur TCP 10061: aucune connexion n'a pu être établie car la machine cible l'a activement refusée dans mon projet actuel. Je trouve que ce code d'erreur 10061 ne permet pas de distinguer le cas où le point de terminaison du service n'est pas démarré et le cas où il est bloqué par le pare-feu. Le pare-feu peut souvent être désactivé, mais le problème persiste.

Vous pouvez tester votre code de deux manières.

  1. Insérez le code pour obtenir l'heure A à laquelle le service est démarré et l'heure B à laquelle le client envoie la demande au serveur. Si B est antérieur à A, cela peut causer ce problème.
  2. Remplacez le port de votre serveur par un autre port également disponible dans le système. Vous trouverez le même code d'erreur signalé.

Ci-dessus est ma solution. Cela fonctionne sur ma machine. J'espère que ça aide!

2
Cary

J'ai eu un problème similaire. Dans mon cas, le service fonctionnerait correctement sur la machine du développeur mais échouerait sur une machine d'assurance qualité. Il s'est avéré que sur la machine d'assurance qualité, l'application n'était pas exécutée en tant qu'administrateur et n'était pas autorisée à enregistrer le système d'extrémité:

HTTP n'a pas pu enregistrer l'URL http: // +: 12345/Foo.svc /] . Votre processus n'a pas de droits d'accès sur cet espace de nom (voir http://go.Microsoft.com/fwlink/?LinkId=7035 pour plus de détails).

Reportez-vous ici pour savoir comment le faire fonctionner sans être un utilisateur administrateur: https://stackoverflow.com/a/885765/38258

1
Nick Gotch

Vérifiez si un autre programme utilise ce port.

Si une instance du même programme est toujours active, supprimez ce processus.

1

J'ai eu un problème similaire en rejetant localhost et 127.0.0.1. cmd (admin) netstat -anb a trouvé le port fonctionnant sur 169.254.80.80 (je ne sais pas si cette adresse IP venait de parce que mon adresse IP réseau était 10.0.0.5. Après avoir entré cette adresse IP, cela a fonctionné. Cela donne l'adresse IP correcte:

IPAddress ipAddress = ipHostInfo.AddressList[0];
Console.WriteLine(ipAddress.ToString());
1
Paul Grobbelaar

Si vous utilisez la tempête WCF, pouvez-vous même vous connecter au point de terminaison du service WCF? Sinon, et que vous l'hébergez dans un service Windows, vous avez probablement oublié d'enregistrer cet espace de noms. Il n'est pas très bien annoncé que cette étape est requise et c'est en fait agaçant.

J'utilise cet outil pour faire cela ; il automatise toutes ces étapes fastidieuses.

1
Matt

J'ai également fait face à un problème dans. Net Remoting Service en C #.

Je l'ai résolu en 3 étapes:

  1. Modifiez le port de protocole dans tous les fichiers, où qu'il soit utilisé.
  2. Exécutez votre programme de serveur hôte et rendez-le actif.
  3. Maintenant, lancez votre programme client.
0
Amandeep Kaur Arora

Avec cette erreur, j’ai pu la localiser. Grâce à @Yaur, vous devez essentiellement vérifier le service (WCF) s’il est en cours d’exécution ainsi que les propriétés TCP sortantes et entrantes de vos paramètres de pare-feu avancés.

0
PinoyDev

J'ai eu un problème similaire. Dans mon cas, une application proxy VPN telle que Psiphon a modifié la configuration du proxy dans Windows, suivez donc ceci:

sous Windows 10, recherchez les paramètres de proxy modifiés et le serveur proxy tournant dans le proxy manuel

0
Ali Besharati nia

J'ai eu le même problème sur mon serveur Web "Aucune connexion n'a pu être établie car la machine cible l'a activement refusée 161.x.x.235: 5672". J'ai demandé à l'administrateur d'ouvrir le port 5672 sur le serveur Web, puis cela a bien fonctionné.

0
Hung Vu

Vérifiez si le numéro de port dans le fichier Web.config de votre page Web est identique à celui hébergé sur IIS .

0
Sarath Avanavu

Avec un modèle similaire, mon client restant appelle l'API de service, le service a été appelé avec succès lors du débogage, mais ne fonctionne pas sur le code publié. Erreur était: Impossible de se connecter au serveur distant.

Exception interne: System.Net.Sockets.SocketException (0x80004005): Aucune connexion n'a pu être établie car la machine cible l'a activement refusé. ServiceIP: 443 sur System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, SocketAddress socketAddress) sur System.Net. .ServicePoint.ConnectSocketInternal (connectivité booléenne, Socket s4, Socket s6, Socket & socket, IPAddress & address, état ConnectSocketState, IAsyncResult asyncResult, Exception & exception)

Résolution: définissez le proxy dans la configuration Web.

<system.net>
    <defaultProxy useDefaultCredentials="true">
      <proxy proxyaddress="http://proxy_ip:portno/" usesystemdefault="True"/>
    </defaultProxy>
</system.net>
0
SFK

Assurez-vous que tous les services utilisés par votre application sont activés et utilisent l’hôte et le port pour les utiliser. Par exemple, comme dans mon cas, cette erreur peut survenir, si votre application utilise un serveur Redis et si elle ne peut pas s'y connecter sur un port et un hôte donnés, générant ainsi cette erreur.

0
Calvin