Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Error Unable to complete network request (https://www.clubdelphi.com/foros/showthread.php?t=90443)

Jab 09-06-2016 14:25:24

Error Unable to complete network request
 
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

Cita:

Empezado por Jab (Mensaje 506028)
Disculpadme, ahora no puedo borrar el hilo.

¿Por qué quieres borrarlo?

¿Seguro que has visto esto?

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/Firebi...50-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/201...rchivo-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/201...-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

Cita:

Empezado por Casimiro Notevi (Mensaje 506061)
¿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

Cita:

Empezado por bitbow (Mensaje 506067)
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


La franja horaria es GMT +2. Ahora son las 00:05:12.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi