Es konnte keine Verbindung hergestellt werden, da der Zielcomputer dies aktiv abgelehnt hat. 127.0.0.1:3446

72

Ich verwende die WCF4.0-Vorlage - REST . Ich versuche eine Methode zu erstellen, die eine Datei mithilfe eines Streams hochlädt.

Das Problem tritt immer bei auf

Stream serverStream = request.GetRequestStream();

Klasse zum Streamen:

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;
        }
    }
}

REST-Projekt:

[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);
}

Windows Form-Projekt: zum Testen

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());
    }
}

Ich habe die Firewall und meine Internetverbindung ausgeschaltet, aber der Fehler besteht weiterhin. Gibt es eine bessere Möglichkeit, die Upload-Methode zu testen?

Stapelspur:

bei System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, SocketAddress socketAddress) bei System.Net.ServicePoint.ConnectSocketInternal (Boolean connectFailure, Socket s4, Socket s6, Socket & Socket, IPAddress & Adresse, Ausnahme & Ausnahme)

Glasfaseroptik
quelle
1
Sie sollten sich keine Gedanken über Firewalls oder Internetverbindungen für lokale Verbindungen machen müssen. In Ihrem Code stellen Sie eine Verbindung zum Port her, 8000aber in Ihrer Fehlermeldung lautet der Port 3446. Ist das relevant?
Matt Mitchell
@Graphain das war ein Tippfehler. Danke, dass du es erwähnt hast. Bitte sehen Sie meine Bearbeitung.
FiberOptics

Antworten:

139

"Aktiv abgelehnt" bedeutet, dass der Host beim Versuch, eine Verbindung herzustellen, einen Reset anstelle einer Bestätigung gesendet hat. Es ist daher kein Problem in Ihrem Code. Entweder blockiert eine Firewall die Verbindung, oder der Prozess, der den Dienst hostet, überwacht diesen Port nicht. Dies kann daran liegen, dass es überhaupt nicht ausgeführt wird oder dass es einen anderen Port überwacht.

Versuchen Sie nach dem Starten des Prozesses, der Ihren Dienst hostet, netstat -anb(erfordert Administratorrechte), zu überprüfen, ob er ausgeführt wird und den erwarteten Port überwacht.

Update: Unter Linux müssen Sie dies möglicherweise netstat -anpstattdessen tun .

Yaur
quelle
4
danke für den netstat -anb, ich finde den port nicht in der liste. Kennen Sie einige mögliche Schritte, um dies zu lösen? Ich habe die Firewall ausgeschaltet, den Virenschutz deaktiviert und die Internetverbindung deaktiviert, aber es liegt immer noch ein Fehler vor.
FiberOptics
1
Wie hosten Sie den Service? Wenn Sie nur f5 aus dem Visual Studio heraus treffen, ist es IIRC, das in iisexpress.exe gehostet wird. Sie können sich dieselbe Liste für den Hosting-Prozess ansehen, um herauszufinden, welchen Port er abhört.
Yaur
2
"Wie hosten Sie den Dienst?" Das hat mich wirklich daran gehindert, eine Weile nachzudenken. Ich versuche, mein Restprojekt auszuführen, das den Dienst auf 3445 hostet, und auch das Windows Form-Projekt auszuführen und den Host auch auf 3445 auszurichten. Dann geht alles gut. Vielen Dank! und Danke an alle. Sie haben mir sehr geholfen.
FiberOptics
1
Ich habe alle Einstellungen (Firewall, Port, WcF-Dienst aktivieren) auf meinem Staging-Server vorgenommen, wie von Ihnen angegeben, aber ich erhalte immer noch den gleichen Fehler. Können Sie mich bitte dazu führen?
Trilok Pathak
1
@suBDavis -an bist Linux-spezifisch. Die Originalversion funktioniert unter Windows einwandfrei (und Ihre aktualisierte Version nicht). Dies ist die Plattform, auf der die meisten Benutzer WCF-Dienste entwickeln. Trotzdem habe ich die Antwort mit dem Linux-Äquivalent aktualisiert, da dies jetzt der Top-Hit bei Google für Dinge ist, die nur tangential mit der ursprünglichen Frage zusammenhängen.
Yaur
14

Sie müssen den PC nicht neu starten. Starten Sie stattdessen IIS neu.

Führen Sie -> 'cmd' (als Administrator) aus und geben Sie "iisreset" ein.

gradosevic
quelle
1
Ich sehe den Port, wenn ich das tue, netstat -anbund habe auch den Server neu gestartet. Immer noch der gleiche Fehler, irgendeine Hilfe?
Tahir Yasin
1
Ah fantastisch! Ein Neustart iislöste dieses Problem für mich. Keine der anderen Lösungen hat funktioniert Diese wird unterschätzt!
JayPex
2

Ich habe eine ähnliche Fehlermeldung wie den TCP-Fehlercode 10061 erhalten: Es konnte keine Verbindung hergestellt werden, da der Zielcomputer sie in meinem aktuellen Projekt aktiv abgelehnt hat . Ich finde, dass dieser 10061-Fehlercode den Fall, dass der Service-Endpunkt nicht gestartet wird, und den Fall, dass er von der Firewall blockiert wird, nicht unterscheiden kann. Oft kann die Firewall ausgeschaltet werden, aber das Problem ist immer noch da.

Sie können Ihren Code auf zwei Arten testen.

  1. Geben Sie Code ein, um die Zeit A zu erhalten, zu der der Dienst gestartet wird, und die Zeit B, zu der der Client die Anforderung an den Server sendet. Wenn B früher als A ist, kann dies dieses Problem verursachen.
  2. Ändern Sie Ihren Server-Port in einen anderen Port, der ebenfalls im System verfügbar ist. Sie finden den gleichen gemeldeten Fehlercode.

Oben ist mein Fix. Es funktioniert auf meiner Maschine. Ich hoffe, es hilft!

tragen
quelle
Können Sie bitte hier einen Blick darauf werfen? stackoverflow.com/questions/52386437/…
Vyankatesh S Repal
2

Sie müssen Ihren System-Proxy einrichten. Sie müssen dieses Pfadsteuerfeld >> Internetoption >> Verbindung >> LAN-Einstellungen >> Proxy no tik: Proxyserver verwenden durchlaufen

Paiam Sahari
quelle
Nur wenn Sie tatsächlich einen Proxyserver haben ...
vapcguy
1

Überprüfen Sie, ob ein anderes Programm diesen Port verwendet.

Wenn eine Instanz desselben Programms noch aktiv ist, beenden Sie diesen Prozess.

Tanveer-Ibn-Haresh
quelle
Ich habe das getan, tatsächlich habe ich ein Beispielkonsolenprojekt, das testet, ob der Port verfügbar ist oder nicht.
FiberOptics
Als ich dieses Problem hatte, musste ich meinen PC neu starten, um den Port freizugeben.
Tanveer-Ibn-Haresh
2
Haben Sie versucht, nur die Portnummer zu ändern? Ich hatte ähnliche Probleme beim Hosten von CruiseControl, änderte die Portnummer in der Konfiguration, die ich mit netstat scan nicht finden konnte.
Tanveer-Ibn-Haresh
Sie sollten Ihre web.config veröffentlichen. Ich denke, etwas stimmt nicht mit der Endpunktkonfiguration.
Tanveer-Ibn-Haresh
1

Ich hatte ein ähnliches Problem. In meinem Fall würde der Dienst auf dem Entwicklercomputer einwandfrei funktionieren, auf einem QS-Computer jedoch fehlschlagen. Es stellte sich heraus, dass die Anwendung auf dem QS-Computer nicht als Administrator ausgeführt wurde und keine Berechtigung zum Registrieren des Endpunkts hatte:

HTTP konnte die URL http: // +: 12345 / Foo.svc /] nicht registrieren . Ihr Prozess hat keine Zugriffsrechte auf diesen Namespace ( Einzelheiten finden Sie unter http://go.microsoft.com/fwlink/?LinkId=70353 ).

Hier erfahren Sie, wie Sie es zum Laufen bringen, ohne Administrator zu sein: https://stackoverflow.com/a/885765/38258

Nick Gotch
quelle
1

Können Sie sich bei Verwendung von WCF Storm sogar beim WCF-Dienstendpunkt anmelden? Wenn nicht, und Sie hosten es in einem Windows-Dienst, haben Sie wahrscheinlich vergessen, diesen Namespace zu registrieren. Es ist nicht sehr gut beworben, dass dieser Schritt erforderlich ist, und es ist tatsächlich ärgerlich, dies zu tun.

Ich benutze dieses Tool, um dies zu tun ; Es automatisiert all diese umständlichen Schritte.

Matt
quelle
1

Ich hatte ein ähnliches Problem beim Ablehnen von localhost und 127.0.0.1. cmd (admin) hat netstat -anbfestgestellt, dass der Port auf 169.254.80.80 ausgeführt wird (ich weiß nicht, woher die IP stammt, da meine Netzwerk-IP 10.0.0.5 war. Nach dem Eingeben dieser IP hat es funktioniert. Dies gibt die richtige IP:

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

Überprüfen Sie, ob die Portnummer in der Datei Web.config Ihrer Webseite mit der auf IIS gehosteten übereinstimmt .

Sarath Avanavu
quelle
0

Mit diesem Fehler konnte ich ihn verfolgen. Dank @Yaur müssen Sie im Grunde den Dienst (WCF) überprüfen, wenn er ausgeführt wird, und auch die ausgehenden und eingehenden TCP-Eigenschaften in Ihren erweiterten Firewall-Einstellungen überprüfen.

PinoyDev
quelle
0

Ich hatte das gleiche Problem auf meinem Webserver "Es konnte keine Verbindung hergestellt werden, da der Zielcomputer diese aktiv abgelehnt hat 161.xx235: 5672". Ich habe den Administrator gebeten, den Port 5672 auf dem Webserver zu öffnen, dann hat es gut funktioniert.

Hung Vu
quelle
1
Öffnen Sie auf Ihrem Server die Windows-Firewall mit erweiterter Sicherheit. Fügen Sie eine neue eingehende / ausgehende TCP-Regel hinzu und geben Sie Port 5672 ein. Bitten Sie den Netzwerkadministrator, dies für Sie zu tun.
Hung Vu
0

Mit einem ähnlichen Muster ruft mein Rest-Client die Service-API auf, den Service, der beim Debuggen erfolgreich aufgerufen wurde, aber nicht mit dem veröffentlichten Code arbeitet. Fehler war: Es konnte keine Verbindung zum Remote-Server hergestellt werden.

Innere Ausnahme: System.Net.Sockets.SocketException (0x80004005): Es konnte keine Verbindung hergestellt werden, da der Zielcomputer ServiceIP: 443 bei System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, SocketAddress socketAddress) bei System.Net aktiv abgelehnt hat .ServicePoint.ConnectSocketInternal (Boolean connectFailure, Socket s4, Socket s6, Socket & Socket, IPAddress & Adresse, ConnectSocketState-Status, IAsyncResult asyncResult, Ausnahme & Ausnahme)

Lösung: Legen Sie den Proxy in der Webkonfiguration fest.

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

Ich hatte auch ein Problem mit dem .Net Remoting Service in C #.

Ich habe es in 3 Schritten gelöst:

  1. Ändern Sie den Protokollport in allen Dateien, wo immer er verwendet wird.
  2. Führen Sie Ihr Host Server-Programm aus und aktivieren Sie es.
  3. Führen Sie nun Ihr Client-Programm aus.
Amandeep Kaur Arora
quelle
0

Ich hatte ein ähnliches Problem. In meinem Fall hat die VPN-Proxy-App wie Psiphon prox das Proxy-Setup in Windows geändert. Gehen Sie also folgendermaßen vor:

Suchen Sie unter Windows 10 im manuellen Proxy nach Proxy-Einstellungen und Turn-of-Use-Proxyserver

Ali
quelle
0

Stellen Sie sicher, dass alle von Ihrer Anwendung verwendeten Dienste aktiviert sind, die Host und Port verwenden, um sie zu verwenden. Zum Beispiel, wie in meinem Fall, kann dieser Fehler auftreten, wenn Ihre Anwendung einen Redis-Server verwendet und auf einem bestimmten Port und Host keine Verbindung herstellen kann, wodurch dieser Fehler auftritt.

Farhan
quelle
0

Ich konnte IIexpress nicht neu starten. Dies ist die Lösung, die für mich funktioniert hat

  1. Der Build wurde gereinigt
  2. Wiederaufbauen
Mankgwanyane Tlaka
quelle
-1

Einführung: Ich habe ein solches Problem beim Testen meiner ersten Netzwerk-App festgestellt. Ich habe erstellt: Client und Server, dann habe ich Client ausgeführt und plötzlich wurde eine Ausnahme ausgelöst, die die Verbindung blockiert, da der Port nicht abgehört wird!

Fehler: Mein Port wurde vom Server nicht überwacht, da der Server nicht verfügbar war.

Lösung: Führen Sie zuerst den Server aus, damit der Port vom Server überwacht wird. Sobald der Client versucht, eine Verbindung herzustellen, übernimmt der Server dies.

M22
quelle