PDA

Ver la Versión Completa : Error Unable to complete network request


Jab
09-06-2016, 14:25:24
Buenos días:

He leído la guía del estilo y buscado la información, pero no he encontrado más que uno del 2005 pero no hay solución ¿?
http://www.clubdelphi.com/foros/showthread.php?t=17785

El problema es el siguiente:
Tengo una aplicación que en local trabaja correctamente, en red local con TCP/IP también, sin cortes ni nada, pero cuando se conecta por TCP/IP a una dirección IP fija remota y está inactivo 5 o 10 minutos aparece el mensaje de error

Unable to complete network request to host "XXXXX"
Error writing data to the connection

siendo XXXX una IP fija.

Los equipos tienen todos Windows 7. El firebird instalado es la versión 2.5.5.26952 en modo SuperServer.

He encontrado en foros y en todos ellos aportan como solución el bloqueo del firewall del puerto 3050, o configurar el host

He configurado las excepciones, he dejado incluso sin firewall ni antivirus el equipo por si fuera algo de esto. Sigue sucediendo el problema.

También he revisado el fichero c:\windows\system32\drivers\etc\hosts y añadido la IP fija también.
Hice todas las actualizaciones de Windows 7.

El número de conexiones simultáneas a la base son:
1 Local
1 En red local
2 En red remota.

¿Alguna idea que pueda hacer o efectuar?
Muchas gracias de antemano.

aposi
09-06-2016, 16:49:47
Mantienes abierta la conexión a la base de datos o conectas cada vez que necesitas alguna cosa?
Si mantienes abierta la conexión y la linea de internet tiene microcortes, pierdes la conexión y aparece este error.

Jab
09-06-2016, 17:02:58
Hola, la conexión del servidor tiene fibra a 400 Mb, y los clientes fibra a 200 Mb.
He realizado un ping y no hay microcortes al menos desde el servidor hacia fuera y de los dos equipos que se desconectan hacia fuera.
La aplicación abre la base de datos y mantiene abierta

Si hubiera cortes ¿no se desconectaría también en red local?

He probado el sistema en otro servidor con Windows 2003 y con un equipo de Windows 10 y no hay desconexión.

Por otro lado, he buscado "firebird y microcortes" y resulta que en esta ocasión el buscador de Clubdelphi.com me aparece este hilo

http://www.clubdelphi.com/foros/showthread.php?t=82425

Antes busqué por esas palabras y nada.

En cualquier caso, he realizado todo lo que se indica ahí, incluso http://www.firebirdfaq.org/faq136/

Disculpadme, ahora no puedo borrar el hilo.

bitbow
09-06-2016, 18:20:03
Que operaciones realizas?

Yo realizo conexiones de este tipo de la siguiente formas

Envia info cuando el usuarios da click en el boton A >>
Abro conexión
Inserto informacion en la bd;
Cierro Conexión;

El punto es que no tienes por que tener la conexion abierta todo el tiempo y dependiendo de la informacion que requieras intercambiar con el servidor podrias usar un servidor DataSnap o WebService.

Saludos.

Casimiro Notevi
09-06-2016, 18:56:54
Disculpadme, ahora no puedo borrar el hilo.¿Por qué quieres borrarlo?

¿Seguro que has visto esto (http://www.intitec.com/varios/Firebird_Reservar-port-3050-win2003.pdf)?

Jab
09-06-2016, 19:53:59
He mirado otras cosas:
Por lo visto el programa cliente accede a una ruta mediante asignación DHCP con IP asignada automáticamente y tiene el puerto 3050 bloqueado. Aunque se conecta al servidor con el programa.

Y servidor no tiene la IP pública aunque el software puede conectarse a esa IP hasta que temporalmente se desconecta.

He asignado una IP local al ordenador de conexión y he pedido que se abra el puerto 3050 dirigido a la IP de cada equipo remoto con su proveedor de acceso a Internet y también que se mantenga la IP pública, siguiendo los consejos de http://www.firebirdfaq.org/faq136/

También me he guiado con esta entrada -> https://firebird21.wordpress.com/tag/puerto/ que hablan de la IP pública.

Mañana os cuento si toda esta configuración ha funcionado.

bitbow muchas gracias por tu respuesta, las conexiones que utiliza son cliente-servidor usando TIBDataSet con campos persistentes. Desconozco el tema que me indicas de DataSnap o WebService. Pero estoy de acuerdo contigo en que debo cambiar algo de las rutinas para que sean accesos concretos o más robusto ante errores.

Casimiro Indiqué lo de borrarlo o unirlo al anterior antiguo porque puede perjudicar al foro tener dos hilos duplicados, era por eso. Que no había visto el otro hilo. No obstante, gracias también por tu aportación. Lo he visto, pero el equipo que hace de servidor tienen Windows 7. No es un servidor "real" como en el de pruebas con windows 2003 o en otros equipos con windows 2008, que sí funciona correctamente y no hay cortes.


Conclusiones: salvo porque en el entorno de pruebas tenemos un Windows 2003 (servidor) con Windows 10 como cliente, y en el que da problemas son los dos Windows 7, ahora están iguales. Es decir, puestos con IP fija pública y el 3050 habilitado en todos los routers con una IP local asignada fija, no dinámicamente para los equipos clientes.

Jab
10-06-2016, 12:00:11
Buenas, el problema sigue apareciendo.

Con un equipo con Windows 2003 y Windows 10 como cliente, va todo correcto, no hay error ni desconexión.
Con un equipo con Windows 7 como servidor y Windows 7 como cliente, aparece el error al cabo de varios minutos.

He probado en desactivar el firewall, y los clientes no tienen antivirus como el servidor, pero el problema se mantiene.

Así que he procedido a instalarle en uno de los equipos con problemas un antivirus y dejar el firewall activado. Además, he añadido lo que comenta Casimiro http://www.intitec.com/varios/Firebird_Reservar-port-3050-win2003.pdf como puerto reservado, aunque sea para Windows 7.

Pero nada, sigue dando problemas. No sé qué más hacer.

Jab
10-06-2016, 13:16:00
Bueno, más cosillas, sigo actualizando el hilo por si alguno le resuelve en el futuro.

Por más que leo observo que todos aportan como solución un problema de la red, existe el archivo LOG encontrado por ejemplo en
C:\Archivos de Programa\Firebird\Firebird_2_5\)

https://firebird21.wordpress.com/2013/05/11/el-archivo-de-log/

En mi caso en el lado del cliente dice

INET/inet_error: read errno = 10054
INET/inet_error: read errno = 10038

En el lado del servidor
SERVER (Server) Thu Apr 14 17:29:34 2016
Unable to complete network request to host "server".
Timeout occurred while waiting for a secondary connection for event processing

Y luego

SERVER (Server) Thu Jun 09 19:10:59 2016
INET/inet_error: read errno = 10054

SERVER (Server) Thu Jun 09 19:14:11 2016
INET/inet_error: read errno = 10054

SERVER (Server) Thu Jun 09 19:22:02 2016
INET/inet_error: read errno = 10054

SERVER (Server) Thu Jun 09 19:27:32 2016
INET/inet_error: read errno = 10054

SERVER (Server) Thu Jun 09 19:30:33 2016
INET/inet_error: read errno = 10054

Que corresponde con
https://firebird21.wordpress.com/2013/03/06/error-10054-en-windows-y-104-en-linux/

Indica que
"El error 10054 “connection reset by peer” es un problema de la red que a veces puede deberse a una red que está mal configurada o a un problema de hardware. "

Por lo que parece existen routers que cierran el puerto por inactividad, y al parecer ese no es el problema según el proveedor de acceso a Internet porque su router no cierra la actividad si no hay tráfico.

He revisado la red varias veces pero no encuentro fallo.

Casimiro Notevi
10-06-2016, 13:26:44
¿Usas post_event en algún caso?

Jab
10-06-2016, 14:06:26
¿Usas post_event en algún caso?

Hola Casimiro, gracias por tu aportación. No se utilizan estos eventos en la base.
No obstante, con la base de datos remota y otros casos no hay desconexiones, esto es lo raro.
¿Por qué lo preguntas?

Jab
10-06-2016, 14:34:28
No lo indiqué, este problema ha empezado al poner la aplicación en este sistema en remoto y fue hace 3-4 días. El mensaje de error del 14 de Abril debe corresponder a algún otro suceso guardado en el log pero no con este problema.

He creado una conexión a la máquina que hace de servidor donde está la base de datos, y lo hago desde un entorno de pruebas y se desconecta también, puedo descartar que el problema sea de las máquinas clientes remotas, puede ser del servidor. Pero en el log de la máquina cliente no aparece este error, lo acabo de comprobar.

Utilizando otra aplicación lo dejas sin hacer nada, al cabo de unos minutos aparece
"Error reading data from connection". Y ya cierra el programa con errores.

En el log no aparece este fallo ni read errno 10054 ni nada. :confused:

He conectado el IBExpert v 2016.4.4.1 a la base remota, y dejado sin efectuar ninguna acción durante unos minutos, y se desconecta indicando:

"Cant't format message 13:98 -- message file C:\windows\systema32\firebird.msg not found. Error reading data from connection. Connection will be closed immediately".

Creo que puedo descartar problema de Software.

bitbow
10-06-2016, 14:41:00
Es muy raro el error que se te presenta, como te indicó arriba, por que tendrías que dejar tu conexión abierta después de un proceso de lectura o escritura? En mi caso realizó inserciones a la base de datos de forma remota pero abro y cierro la conexión, mi conexión no se queda abierta más de 10 segundos en el peor de los casos.

Los componentes de bases de datos tienen eventos en donde puedes gestionar (con bastantes limitaciones) estos errores.

Saludos.

Jab
10-06-2016, 14:49:51
Nueva prueba:
Arranco la aplicación IBExpert anterior, conecto a la BD remota y la minimizo. Acto seguido realizo un ping XX.XX.XX.XX /t
Aunque ya se hizo esto con anterioridad y no había paquetes perdidos, es una manera de comprobar si manteniendo el tráfico en la red el equipo servidor desconecta la conexión o no. Aunque el proveedor de acceso a Internet confirmó que no existía ningún firewall del router que cerrara el puerto 3050 por inactividad.

Al cabo de unos minutos se desconecta dando el mismo error anterior.

Realizo un ping -t -l 51200 XX.XX.XX.XX por si es el problema del tamaño de los paquetes por ejemplo. Al cabo de 2 minutos no hay paquetes perdidos.

:confused::confused::confused::confused:

Jab
10-06-2016, 14:54:33
Es muy raro el error que se te presenta, como te indicó arriba, por que tendrías que dejar tu conexión abierta después de un proceso de lectura o escritura? En mi caso realizó inserciones a la base de datos de forma remota pero abro y cierro la conexión, mi conexión no se queda abierta más de 10 segundos en el peor de los casos.

Los componentes de bases de datos tienen eventos en donde puedes gestionar (con bastantes limitaciones) estos errores.

Saludos.

Hola bitbow, gracias por tu aportación.
Observa que uso el IBExpert y también sucede ¿Lo que indicas es que abra y cierre la base de datos completa por cada vez que hago una inserción?

Casimiro Notevi
10-06-2016, 15:47:17
Prueba desde otro sitio, por ejemplo desde tu casa u otro sitio que puedas controlar y que existan los mínimos "obstáculos" entre tú y el servidor.

bitbow
10-06-2016, 16:30:47
Comentaba anteriormente una duda, que operaciones realizas sobre la base de datos? Y por qué es necesario tener abierta la conexión (cuanto tiempo aproximado.) ?.

La verdad nunca he necesitado ma tener una conexión remota más de algunos minutos, para las conexiones de mis portales (en delphi con intraweb) se maneja un pool de conexiones y no presentó problemas (la conexión se abre 30 min ) pero es un esquema diferente.

Puedes revisar instalando otras versiones de firebird, y antes de eso revisar la configuración de este a fondo.

Harea algunas pruebas para ver si sucede los mismo.

Suerte, saludos.

bitbow
10-06-2016, 17:06:17
Si, efectivamente, realmente te muchos creen que esto es algo fuera de lo usual, pero cuando trabajas en ambientes remotos (Internet), así es como se trabaja o con un pool de conexiones, no abres toda la base de datos sólo la conexión (la carga la maneja el servidor no tu aplicación), imagínate tener abierta una conexión por horas o días, esto si sería descabellado a menos que realmente uses esas conexiones todo ese tiempo.

Saludos.

Jab
10-06-2016, 17:10:33
Hola de nuevo compañeros, y gracias por vuestras aportaciones.

Casimiro, ya lo había probado antes, pero volví a hacerlo desde mi casa con Windows 10 cliente y servidor windows 2003, y va perfectamente. Puede estar parado 40 minutos con la conexión abierta y al pasar el foco al programa, retoma todo correctamente y no se desconecta, como cabía esperar.

Bitbow, el programa es cliente-servidor y son unas 120 tablas, el módulo activado son unas 20 tablas, normalmente las conexiones remotas no dan problemas y pueden estar horas conectados sin fallo, con bases de 4 o 5 millones de registros en una tabla y concurrencia de 10-12 personas por ejemplo. En este en concreto son unos miles de registros nada más. Abrir la base y las tablas cada vez que hago una inserción lo veo poco viable porque tarda unos 10-12 segundos, es más robusto pero más lento.

Creo que el error viene del servidor.

Desde mi casa también se desconecta a ese equipo

La semana que viene vamos a cambiar el equipo que hace de servidor a ver si es del equipo o de su router u otro software que esté merodeando.

Parece claro que aunque el software es mejorable y se podría gestionar de otra manera como apunta Bitbow, podría deberse a algo puntual de la red en software o hardware.

Os iré contando y al final cuál fue la solución.
:rolleyes:

bitbow
10-06-2016, 19:14:00
Creo que convendría revisar tu esquema para la consulta de información (es complicado manejar ese volumen e información en tiempo real), una recomendación seria manejar tablas temporales o clientdataset y posteriormente aplicar los cambios o migrar a un esquema con datasnap.

Hay un tema (debate) reciente que trata de que esquemas manejar y como se podría hacer de la mejor manera en un ambiente en internet, se plantean algunas buenas practicas y otras no tanto, no encuentro el tema pero lo vi en el listado reciente.

Como mencionas >> Revisar la infraestructura e red y el servidor para poder garantizar conectividad y estabilidad.

La realidad es que con los mejores enlaces y hardware si no planteamos bien el esquema a utilizar, una caída del enlace en algún punto podría suponer detener el trabajo por horas.

Saludos y suerte.

rastafarey
12-06-2016, 02:56:25
Eso de mantener las conexiones abiertas te va a causar algunos de dolores de cabeza por decir muchos.

Enviado desde mi SM-G900H mediante Tapatalk

Jack
12-06-2016, 21:06:29
Yo suelo tener también es problema. Lo soluciono cambiando el plan de energia del ordenador que hace de servidor poniendolo a alto rendimiento.
Tambien pongo el permiso de la tarjeta de red a false para que el equipo no pueda apagar el dispositivo para ahorrar energia.
Espero os sirva tan bien como me sirve a mi.
Un saludo.

Jab
13-06-2016, 17:49:38
Gracias a todos por los comentarios.

En este caso es necesario mantener la conexión porque el usuario tiende a dejar DBGrid abiertas tras buscar información, y ya no es plan de pasar a ADO la herramienta cliente porque el número de usuarios simultáneos es bastante pequeño (2-10 máximo).

Por otro lado he probado lo de Jack, pero nada, creo que el problema está en la configuración o alguna carencia de Windows, ya que no hay cortes en la conexión.

He pensado en realizar lo que recomiendan para clientes que precisan tener la conexión activa, que es, si ya no se va puede aplicar ADO, lanzar una rutina de verificación de la conexión
https://firebird21.wordpress.com/2014/10/13/usando-firebird-con-wifi/

Pienso que el problema es de hardware del lugar o de configuración de software, ya que en otros lugares no se pierde la conexión y eso que la velocidad es más lenta.

:rolleyes:

Jab
21-06-2016, 17:19:11
Buenas, pues tras varios días haciendo pruebas y demás historias, no he conseguido solucionar el problema del servidor. Desconozco si era un problema de software de la máquina (Windows 7) o de la red que diera algún problema (aparentemente no).

El equipo en red con el software iba bien, en cambio cualquier equipo que se conectara a la base por TCP/IP al cabo de un par de minutos se desconectaba.

Incluso metí una rutina para que cada minuto hiciera una verificación de conexión. La conexión la mantenía, el problema era que si un registro estaba abierto, en modo de inserción, o edición, se colgaba, como si se desconectara, y daba ese error, había que cerrar el programa a la brava y volver a entrar.

Era inevitable, ya que aunque hiciera una rutina de conexión / desconexión de las tablas en cada momento, si el usuario mientras añadía datos o rellenaba la ficha tardaba 1 minuto, plof, se cerraba.


Dejo esto aquí por si alguien le pasara algo parecido y diera con la solución lo indicara, porque en el resto de hilos que vi sobre el tema, al final era un problema de configuración de red, pero no indican más. Aquí la red aparentemente está bien, no hay microcortes (haciendo ping desde remoto), etc. Si no estuviera correctamente el programa en red fallaría igualmente, pero no lo hace.

Gracias de todas maneras y saludos varios a todos.

gustavodiego01
05-03-2019, 03:37:20
Queria preguntarte si solucionaste el problema de la desconexion de la base de datos, yo tb tenia el mismo problema solucione con el componente TClientDataSet y DataSetProvider1 que son tablas en memoria.
Saludos