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)
c#
wcf
rest
httpwebrequest
Glasfaseroptik
quelle
quelle
8000
aber in Ihrer Fehlermeldung lautet der Port3446
. Ist das relevant?Antworten:
"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 -anp
stattdessen tun .quelle
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.-an b
ist 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.Sie müssen den PC nicht neu starten. Starten Sie stattdessen IIS neu.
quelle
netstat -anb
und habe auch den Server neu gestartet. Immer noch der gleiche Fehler, irgendeine Hilfe?iis
löste dieses Problem für mich. Keine der anderen Lösungen hat funktioniert Diese wird unterschätzt!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.
Oben ist mein Fix. Es funktioniert auf meiner Maschine. Ich hoffe, es hilft!
quelle
Sie müssen Ihren System-Proxy einrichten. Sie müssen dieses Pfadsteuerfeld >> Internetoption >> Verbindung >> LAN-Einstellungen >> Proxy no tik: Proxyserver verwenden durchlaufen
quelle
Überprüfen Sie, ob ein anderes Programm diesen Port verwendet.
Wenn eine Instanz desselben Programms noch aktiv ist, beenden Sie diesen Prozess.
quelle
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:
Hier erfahren Sie, wie Sie es zum Laufen bringen, ohne Administrator zu sein: https://stackoverflow.com/a/885765/38258
quelle
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.
quelle
Ich hatte ein ähnliches Problem beim Ablehnen von localhost und 127.0.0.1. cmd (admin) hat
netstat -anb
festgestellt, 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());
quelle
Überprüfen Sie, ob die Portnummer in der Datei Web.config Ihrer Webseite mit der auf IIS gehosteten übereinstimmt .
quelle
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.
quelle
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.
quelle
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>
quelle
Ich hatte auch ein Problem mit dem .Net Remoting Service in C #.
Ich habe es in 3 Schritten gelöst:
quelle
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:
quelle
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.
quelle
Ich konnte IIexpress nicht neu starten. Dies ist die Lösung, die für mich funktioniert hat
quelle
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.
quelle