c# - terminado - system net webexception no es posible conectar con el servidor remoto
Una conexión existente fue cerrada a la fuerza por el host remoto (9)
El uso de TLS 1.2 resolvió este error.
Puede forzar su aplicación usando TLS 1.2 con esto (asegúrese de ejecutarlo antes de llamar a su servicio):
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
Otra solución :
Habilite la criptografía fuerte en su máquina o servidor local para usar TLS1.2 porque de manera predeterminada está deshabilitada, por lo que solo se usa TLS1.0.
Para habilitar la criptografía fuerte, ejecute estos comando en PowerShell con privilegios de administrador:
Set-ItemProperty -Path ''HKLM:/SOFTWARE/Wow6432Node/Microsoft/.NetFramework/v4.0.30319'' -Name ''SchUseStrongCrypto'' -Value ''1'' -Type DWord
Set-ItemProperty -Path ''HKLM:/SOFTWARE/Microsoft/.NetFramework/v4.0.30319'' -Name ''SchUseStrongCrypto'' -Value ''1'' -Type DWord
Debe reiniciar su computadora para que estos cambios surtan efecto.
Estoy trabajando con una aplicación comercial que está lanzando una SocketException con el mensaje,
Una conexión existente fue cerrada a la fuerza por el host remoto
Esto sucede con una conexión de socket entre el cliente y el servidor. La conexión está viva y bien, y se están transfiriendo montones de datos, pero luego se desconecta de la nada.
Alguien ha visto esto antes? ¿Cuáles podrían ser las causas? Puedo adivinar algunas causas, pero también hay alguna forma de agregar más en este código para averiguar cuál podría ser la causa?
Cualquier comentario / ideas son bienvenidos.
... Lo último ...
Tengo un poco de registro de algún rastreo .NET,
System.Net.Sockets Verbose: 0 : [8188] Socket#30180123::Send() DateTime=2010-04-07T20:49:48.6317500Z
System.Net.Sockets Error: 0 : [8188] Exception in the Socket#30180123::Send - An existing connection was forcibly closed by the remote host DateTime=2010-04-07T20:49:48.6317500Z
System.Net.Sockets Verbose: 0 : [8188] Exiting Socket#30180123::Send() -> 0#0
Basado en otras partes del registro, he visto el hecho de que dice ''0 # 0'' significa que se está enviando un paquete de 0 bytes de longitud. Pero, ¿qué significa esto realmente?
Una de las dos posibilidades está ocurriendo, y no estoy seguro de cuál,
1) La conexión se cierra, pero los datos se escriben en el socket, creando así la excepción anterior. El 0 # 0 simplemente significa que no se envió nada porque el socket ya estaba cerrado.
2) La conexión aún está abierta, y se está enviando un paquete de cero bytes (es decir, el código tiene un error) y el 0 # 0 significa que un paquete de cero bytes está tratando de enviarse.
¿Que cuentas? Puede que no sea concluyente, supongo, pero tal vez alguien más haya visto este tipo de cosas.
Este error ocurrió en mi aplicación con el protocolo CIP cuando no envié o recibí datos en menos de 10s.
Esto fue causado por el uso del método abierto directo. Puede evitar esto trabajando con otro método o instalar una tasa de actualización de menos los 10 que mantienen su conexión de apertura anticipada.
Esto generalmente significa que el lado remoto cerró la conexión (generalmente enviando un paquete TCP / IP RST
). Si está trabajando con una aplicación de un tercero, las causas probables son:
- Está enviando datos malformados a la aplicación
- El enlace de red entre el cliente y el servidor está bajando por alguna razón
- Ha desencadenado un error en la aplicación de terceros que causó su bloqueo
- La aplicación de terceros ha agotado los recursos del sistema
Es probable que el primer caso sea lo que está sucediendo.
Puede disparar Wireshark para ver exactamente qué está sucediendo en el cable para reducir el problema.
Sin información más específica, es poco probable que alguien aquí realmente pueda ayudarlo mucho.
Esto no es un error en tu código. Viene de la implementación de .Net''s Socket. Si usa la implementación sobrecargada de EndReceive como a continuación, no obtendrá esta excepción.
SocketError errorCode;
int nBytesRec = socket.EndReceive(ar, out errorCode);
if (errorCode != SocketError.Success)
{
nBytesRec = 0;
}
Me encontré con esta Excepción, cuando la propiedad DateTime de la clase no obtiene el valor. Simplemente lo hago nulo DateTime y Encontré la solución.
public class PlanningBoardBO
{
... Other Properties ...
public DateTime? PickupDate { get; set; }
... Here changed DateTime to DateTime?
}
Obtuve esta excepción cuando estaba tratando de leer una fila de la base de datos que tenía un nulo en una columna enum, no podía asignar el nulo en un valor enum.
Solución simple para este problema molesto común:
Simplemente vaya a su archivo " .context.cs" (ubicado debajo de " .context.tt" que se encuentra debajo de su archivo "* .edmx").
Luego, agrega esta línea a tu constructor:
public DBEntities()
: base("name=DBEntities")
{
this.Configuration.ProxyCreationEnabled = false; // ADD THIS LINE !
}
Espero que esto sea útil.
Tenía el mismo error. Realmente funcionó en caso de que el tráfico se haya enviado utilizando algún proxy (violín en mi caso). Marco .NET actualizado de 4.5.2 a> = 4.6 y ahora todo funciona bien. La solicitud real fue:
new WebClient().DownloadData("URL");
La excepción fue:
SocketException: una conexión existente fue cerrada a la fuerza por el host remoto
Tengo esta excepción debido a la referencia circular en la entidad. En la entidad que se parece a
public class Catalog
{
public int Id { get; set; }
public int ParentId { get; set; }
public Catalog Parent { get; set; }
public ICollection<Catalog> ChildCatalogs { get; set; }
}
Agregué [IgnoreDataMemberAttribute] a la propiedad Parent. Y eso resolvió el problema.