servicio from consumir consuming consume c# wcf rest httpwebrequest

from - consumir api rest c#



No se pudo establecer ninguna conexión porque la máquina de destino la rechazó activamente. 127.0.0.1:3446 (13)

Estoy usando la plantilla WCF4.0 - REST . Estoy intentando hacer un método que cargue un archivo usando una secuencia.

El problema siempre ocurre en

Stream serverStream = request.GetRequestStream();

Clase para transmisión:

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

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

Proyecto Windows Form: para probar

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

Apagué el firewall y mi conexión a Internet, pero el error aún existe. ¿Hay una mejor manera de probar el método de carga?

Stack trace:

en System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, SocketAddress socketAddress) en System.Net.ServicePoint.ConnectSocketInternal (Boolean connectFailure, Socket s4, Socket s6, Socket & socket, IPAddress & address, estado de ConnectSocketState, IAsyncResult asyncResult, Int32 timeout, Excepción y excepción)


"Activamente se negó" significa que el host envió un reinicio en lugar de un ack cuando trataste de conectarte. Por lo tanto, no es un problema en su código. O bien hay un firewall bloqueando la conexión o el proceso que aloja el servicio no está escuchando en ese puerto. Esto puede deberse a que no se está ejecutando o porque está escuchando en un puerto diferente.

Una vez que inicie el proceso de alojamiento de su servicio, intente netstat -anb (requiere privilegios de administrador) para verificar que se está ejecutando y escuchando en el puerto esperado.

actualización: en Linux puede que necesite hacer netstat -anp en netstat -anp lugar.


Compruebe si el número de puerto en el archivo Web.config de su página web es el mismo que está alojado en IIS .


Con este error, pude rastrearlo, gracias a @Yaur, básicamente, debe verificar el servicio (WCF) si se está ejecutando y también verificar las propiedades de entrada y salida de TCP en la configuración avanzada de su firewall.


Con un patrón similar, mi cliente de reposo llama a la API del servicio, el servicio se llamó con éxito al depurar, pero no funciona en el código publicado. El error fue: no se pudo conectar al servidor remoto.

Excepción interna: System.Net.Sockets.SocketException (0x80004005): no se pudo establecer ninguna conexión porque la máquina de destino rechazó activamente el servicioIP: 443 en System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, SocketAddress socketAddress) en System.Net .ServicePoint.ConnectSocketInternal (Boolean connectFailure, Socket s4, Socket s6, Socket & socket, IPAddress & address, estado de ConnectSocketState, IAsyncResult asyncResult, Exception & exception)

Resolución: configure el proxy en la configuración web.

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


Debe configurar su servidor proxy del sistema. Tiene que pasar por esta ruta panel de control >> opción de internet >> conexión >> configuración LAN >> proxy no tik: use servidor proxy


No es necesario reiniciar la PC. Reinicie IIS en su lugar.

Ejecute -> ''cmd'' (como administrador) y escriba "iisreset"


Recibí un mensaje de error similar, como el código de error TCP 10061: No se pudo establecer ninguna conexión porque la máquina de destino la rechazó activamente en mi proyecto actual. Encuentro que este código de error 10061 no puede distinguir el caso de que el punto final del servicio no se haya iniciado y el caso de que esté bloqueado por el firewall. A menudo, el firewall se puede apagar, pero el problema sigue ahí.

Puedes probar tu código de las siguientes dos maneras.

  1. Inserte el código para obtener el tiempo A para que el servicio se inicie y el tiempo B para que el cliente envíe la solicitud al servidor. Si B es anterior a A, puede causar este problema.
  2. Cambie su puerto de servidor a otro puerto que también esté disponible en el sistema. Encontrará el mismo código de error informado.

Arriba está mi solución. Funciona en mi máquina. ¡Espero que ayude!


Si usa tormenta WCF, ¿puede incluso iniciar sesión en el punto final del servicio WCF? Si no es así, y lo está alojando en un servicio de Windows, probablemente haya olvidado registrar ese espacio de nombres. No está muy bien publicitado que este paso sea necesario, y en realidad es molesto hacerlo.

Yo uso esta herramienta para hacer esto ; automatiza todos esos pasos engorrosos.


También enfrenté un problema en .Net Remoting Service en C #.

Lo solucioné en 3 pasos:

  1. Cambie el puerto de protocolo en todos los archivos donde quiera que esté siendo utilizado.
  2. Ejecute su Programa de Servidor de Host y hágalo activo.
  3. Ahora ejecuta tu programa de cliente.

Tuve el mismo problema en mi servidor web "No se pudo establecer ninguna conexión porque la máquina de destino la rechazó activamente 161.xx235: 5672". Le pedí al administrador que abriera el puerto 5672 en el servidor web, y funcionó bien.


Tuve un problema similar al rechazar localhost y 127.0.0.1. cmd (admin) netstat -anb encontró el puerto ejecutándose en 169.254.80.80 (no sé de dónde vino la ip porque mi red IP era 10.0.0.5. Después de poner en esta IP funcionó. Esto da IP correcta:

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


Tuve un problema similar. En mi caso, el servicio funcionaría bien en la máquina del desarrollador, pero fallaría cuando estuviera en una máquina de QA. Resultó que en la máquina de control de calidad la aplicación no se ejecutaba como administrador y no tenía permiso para registrar el punto final:

HTTP no pudo registrar la URL http://+:12345/Foo.svc/] . Su proceso no tiene derechos de acceso a este espacio de nombres (consulte http://go.microsoft.com/fwlink/?LinkId=70353 para obtener más información).

Consulte aquí cómo hacerlo funcionar sin ser un usuario administrador: https://.com/a/885765/38258


Verifique si algún otro programa está usando ese puerto.

Si una instancia del mismo programa aún está activa, elimine ese proceso.