Non è stato ansible effettuare alcuna connessione perché la macchina di destinazione lo ha triggersmente rifiutato 127.0.0.1:3446

Sto usando il modello WCF4.0 – REST . Sto cercando di creare un metodo per caricare un file utilizzando uno stream.

Il problema si verifica sempre a

Stream serverStream = request.GetRequestStream(); 

Classe per lo 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; } } } 

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

Progetto Windows Form: per il test

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

Ho distriggersto il firewall e la mia connessione Internet, ma l’errore esiste ancora. C’è un modo migliore per testare il metodo di caricamento?

Traccia dello stack:

a System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, SocketAddress socketAddress) su System.Net.ServicePoint.ConnectSocketInternal (Boolean connectFailure, Socket s4, Socket s6, Socket & socket, Indirizzo IP e indirizzo, Stato ConnectSocketState, IAsyncResult asyncResult, Timeout Int32, Eccezione ed eccezione)

“Rifiutato triggersmente” significa che l’host ha inviato un reset anziché un ack quando si è tentato di connettersi. Non è quindi un problema nel tuo codice. O c’è un firewall che blocca la connessione o il processo che sta ospitando il servizio non è in ascolto su quella porta. Ciò potrebbe essere dovuto al fatto che non funziona affatto o perché è in ascolto su una porta diversa.

Una volta avviato il processo che ospita il servizio, provare netstat -anb (richiede i privilegi di amministratore) per verificare che sia in esecuzione e in ascolto sulla porta prevista.

aggiornamento: su Linux potrebbe essere necessario fare invece netstat -anp .

Non è necessario riavviare il PC. Riavvia IIS.

Esegui -> “cmd” (come amministratore) e digita “iisreset”

Ho ricevuto un messaggio di errore simile al codice di errore TCP 10061: non è stato ansible effettuare alcuna connessione perché il computer di destinazione lo ha rifiutato triggersmente nel mio progetto corrente. Trovo che questo codice di errore 10061 non è in grado di distinguere il caso in cui l’endpoint del servizio non viene avviato e il caso in cui sia bloccato dal firewall. Spesso, il firewall può essere spento, ma il problema è ancora lì.

Puoi testare il tuo codice nei due modi seguenti.

  1. Inserisci il codice per ottenere il tempo A che il servizio è iniziato e l’ora B che il client invia la richiesta al server. Se B è precedente a A, può causare questo problema.
  2. Cambiare la porta del server in un’altra porta disponibile anche nel sistema. Troverete lo stesso codice di errore riportato.

Sopra è la mia correzione. Funziona sulla mia macchina. Spero possa essere d’aiuto!

Controlla se qualsiasi altro programma sta usando quella porta.

Se un’istanza dello stesso programma è ancora triggers, elimina tale processo.

Ho avuto un problema simile. Nel mio caso il servizio funzionerebbe benissimo sulla macchina dello sviluppatore ma fallirebbe quando su una macchina QA. Si è scoperto che sulla macchina QA l’applicazione non veniva eseguita come amministratore e non disponeva dell’authorization per registrare l’endpoint:

HTTP non può registrare l’URL http: // +: 12345 / Foo.svc /] . Il tuo processo non ha diritti di accesso a questo spazio dei nomi (consulta http://go.microsoft.com/fwlink/?LinkId=70353 per i dettagli).

Fai riferimento qui per sapere come farlo funzionare senza essere un utente amministratore: https://stackoverflow.com/a/885765/38258

Se si utilizza WCF storm, è ansible accedere anche all’endpoint del servizio WCF? In caso contrario, e lo stai ospitando in un servizio di Windows, probabilmente hai dimenticato di registrare quello spazio dei nomi. Non è molto pubblicizzato che questo passaggio è richiesto, ed è davvero fastidioso da fare.

Io uso questo strumento per fare questo ; automatizza tutti quei passaggi macchinosi.

Ho avuto un problema simile rifiutando localhost e 127.0.0.1. cmd (admin) netstat -anb trovato la porta in esecuzione su 169.254.80.80 (non so che l’IP è venuto perché il mio IP di rete era 10.0.0.5 dopo aver inserito questo IP ha funzionato.

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

Verificare se il numero di porta nel file Web.config della pagina Web è uguale a quello ospitato su IIS .

Con questo errore sono stato in grado di rintracciarlo, grazie a @Yaur, devi essenzialmente controllare il servizio (WCF) se è in esecuzione e anche controllare le proprietà TCP in entrata e in entrata sulle tue impostazioni avanzate del firewall.

Ho avuto lo stesso problema sul mio server web “Imansible stabilire una connessione perché il computer di destinazione lo ha triggersmente rifiutato 161.xx235: 5672”. Ho chiesto all’amministratore di aprire la porta 5672 sul server web, quindi ha funzionato correttamente.

Con un modello simile, il mio client di rest chiama l’API del servizio, il servizio chiamato con successo durante il debug, ma non funziona sul codice pubblicato. Errore: imansible connettersi al server remoto.

Eccezione interna: System.Net.Sockets.SocketException (0x80004005): non è stato ansible stabilire alcuna connessione perché il computer di destinazione ha rifiutato triggersmente il servizio IP: 443 su System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, SocketAddress socketAddress) su System.Net .ServicePoint.ConnectSocketInternal (Boolean connectFailure, Socket s4, Socket s6, Socket e socket, Indirizzo IP e indirizzo, stato ConnectSocketState, IAsyncResult asyncResult, Exception ed eccezione)

Risoluzione: impostare il proxy in Web config.

      

Devi configurare il tuo proxy di sistema Devi passare attraverso questo percorso controlpanel >> opzione internet >> connnection >> impostazioni LAN >> proxy no tik: usa server proxy

Ho anche affrontato problemi nel servizio di rete .Net in C #.

L’ho risolto in 3 passaggi:

  1. Cambia Port of Protocol in tutti i file dove viene utilizzato.
  2. Esegui il tuo programma Host Server e rendilo attivo.
  3. Ora esegui il tuo programma client.