PDA

Ver la Versión Completa : Recomendación para aplicación intranet


JAI_ME
21-11-2012, 22:04:55
Buenos días, actualmente uso delphi6 y firebird para desarrollar aplicaciones cliente/servidor, recientemente me resulto un proyecto donde requiero expandir mi red local a un red mas extensa entre varias ciudades, tengo pensado crear una intranet para solucionar el problema y no migrar todo a web.

Pero como creo una intranet, con una VPN ????

que me pueden recomendar ???


muchas gracias por su ayuda.

Casimiro Notevi
21-11-2012, 22:43:41
Usar VPN es una opción, aunque debes tener en cuenta que tu programa debe estar muy "afinado" para trabajar por internet, y que el ancho de banda debe ser lo mayor posible.
Puede que la opción más simple es usar un programa tipo "terminal server", a mí me gusta ultravnc.

JAI_ME
21-11-2012, 23:15:18
Es decir que con delphi 6 la única forma de hacerlo es con VPN ???
ya que por socket no me parece la mejor opción.

Como funciona el ultravnc ??? aunque no me gustaría cambiar a mi delphi.

Casimiro Notevi
21-11-2012, 23:21:25
Como funciona el ultravnc ??? aunque no me gustaría cambiar a mi delphi.

Primero de todo, hay que tener muy claro exactamente lo que se necesita y lo que se quiere conseguir.
En principio, lo más cómodo de implementar es lo que he comentado antes, conectar mediante "terminal server", "ultravnc" o cualquier programita de control remoto.
Ahora bien, si necesitas algún requerimiento que no puedas cumplir mediante un "control remoto", entonces tendrás que usarlo mediante VPN.
También puedes usarlo "normalmente", pero entonces (también como he comentado antes) debes tener muy, muy "afinada" las conexiones, consultas, etc. a la base de datos, ya que internet es lenta en comparación con una red local.

movorack
21-11-2012, 23:29:52
No todo se puede pasar a web y no todo se puede mantener igual!

Para un proyecto de este tipo se debe planear para no caer en errores que luego nos harán aplicar la estrategia que no quisimos abarcar desde el principio. Cosas como formularios simples, captación de solicitudes, edición de contactos, tec... pueden estar perfectamente en una aplicación web o en un dispositivo movil; Pero algunos procesos importantes para el negocio mejor es que estén en un entorno mas controlado como un aplicativo de escritorio. Hacer esta planeación y determinar no solo que irá en un lado u otro sino también establecer las formas de comunicación entre las n plataformas hará que los procesos lleguen a ser mas efectivos.

Cambiar de entorno o de lenguaje, pues depende de la tecnología o la combinación de las mismas que elijas. Puede que una web en .Net o PHP + Servicios Web escritos en .Net, PHP o Delphi y un app en delphi sea una buena opción para trabajar.

Y si!. Además a esto puedes agregarle conexiones VPN o de escritorio remoto con VNC o Terminal Server como ya te ha aconsejado Casimiro.

JAI_ME
21-11-2012, 23:49:40
Si, requiero de algunos servicios que no los puedo realizar mediante VNC, lo que pretendo es desarrollar una aplicación para escanear documentos desde distintas ciudades, estos documentos deben guardarse directamente en el servidor y que cualquier sede pueda verlos a traves del sistema. Se que al hacer esto remotamente es algo lento ya que hay que enviar archivos pesados del cliente al servidor (si fuera por internet fuera igual de lento que mas da) , por eso se me ocurrió la VPN.

Tengo cierta experiencia en delphi 6 por lo cual no quisiera cambiar el lenguaje de programación ademas requiero que la aplicación escane los documentos.

Casimiro Notevi
22-11-2012, 00:23:10
¿Y por qué no puedes usar VNC?
Si los programas clientes escanean, al guardar el documento es cuando deben de hacerlo en la base de datos del servidor que instales, ahí se conectarán todos, lo demás es igual que siempre. La única diferencia es que el servidor no está en la red local.

JAI_ME
22-11-2012, 13:31:28
No le comprendo muy bien la idea, pues su propuesta es que los clientes se conecten a traves de una VNC al servidor ??? pero ellos deben escanear documentos físicos desde una estación cliente y los archivos escaneados deben ser enviados al servidor para que se guarden todos allí. mi idea era crear un recurso compartido vpn y enrutar todos los clientes a ese recurso y cuando escaneen físicamente se guarde todo alli es decir en el (servidor).

La verdad no encuentro en el uso de una VNC la solución quizás no lo comprendo y esta en mis narices, si es así me gustaría me lo aclararán.

Gracias.

newtron
22-11-2012, 14:17:40
Hola.

Por si te sirve de algo yo tengo hechas aplicaciones de ese estilo montando un servidor de windows en la central y las delegaciones accediendo de forma remota mediante terminal server. Con esta configuración puedes usar casi cualquier programa que funcione en red sin demasiados problemas.

Unicamente veo un escollo en tu intención de escanear documentos puesto que para poder usar el escaner local y que descargue la imagen en el servidor deberás de usar un programa que te gestione todo eso como puede ser el TsScan (http://terminalworks.com/remote-desktop-scanning/).

Saludos

JAI_ME
22-11-2012, 16:12:53
Muchas gracias por sus respuestas, el problema al parecer es el proceso de escaneo, la aplicación cliente al escanear debe crear carpetas en el servidor y guardar los archivos en ellas, por eso me inclino por VPN. pero sigo escuchando sus comentarios.

Casimiro Notevi
22-11-2012, 16:16:41
Entonces, en todo esto, ¿qué parte le toca a firebird?, si escaneas documentos y los guardas en un directorio.

JAI_ME
22-11-2012, 16:34:24
Si firebird lo uso para guardar directorios, es mas rápido guardar directorios que imágenes en la base de datos, ademas de hacer consultas sobre clientes y que a su ves tienes archivos asociados. Estoy en la fase de análisis pienso que es la mejor opción les pido su ayuda y opinión.

Faust
22-11-2012, 16:35:58
Se me ocurre... por poner algo diferente... escanear el documento de manera local, que un programa delphi manipule la imagen y la procese si se requiere y el mismo programa la envíe a un ftp, quizás el servidor ftp también esté programado delphi con componentes Indy y en base al usuario el servidor ftp realice la tarea requerida sobre la imagen, como guardarla en otro directorio o realizar otro tipo de proceso sobre ella... y en cuanto a trabajar con base de datos no quedó muy clara la cuestión

movorack
22-11-2012, 16:58:06
Como también puede ser un aplicativo web que del lado del cliente pueda escanear y manipular el documento y una vez esté listo, escribirlo en el directorio y registrar en la DB la ruta del mismo (que creo es lo que haces en firebird).

- Dynamsoft tiene un sdk (http://www.dynamsoft.com/Products/WebTWAIN_Overview.aspx) para crear web applications con soporte a dispositivos twain

movorack
22-11-2012, 17:09:40
Los mismos de Dynamsoft tienen unos ejemplos del SDK Twain para PHP (http://www.dynamsoft.com/Downloads/PHP-TWAIN-Sample.aspx)

JAI_ME
22-11-2012, 18:16:07
Se me ocurre... por poner algo diferente... escanear el documento de manera local, que un programa delphi manipule la imagen y la procese si se requiere y el mismo programa la envíe a un ftp, quizás el servidor ftp también esté programado delphi con componentes Indy y en base al usuario el servidor ftp realice la tarea requerida sobre la imagen, como guardarla en otro directorio o realizar otro tipo de proceso sobre ella... y en cuanto a trabajar con base de datos no quedó muy clara la cuestión

Parece interesante, pero en firebird aparte de guardar el directorio guardo otros datos, procesados a través de un formulario y que están relacionados a los documentos.
Una ves guardado cualquier otro cliente puede consultar la información, incluso desde cualquier otra ciudad.

Como también puede ser un aplicativo web que del lado del cliente pueda escanear y manipular el documento y una vez esté listo, escribirlo en el directorio y registrar en la DB la ruta del mismo (que creo es lo que haces en firebird).

una web seria una buena opción pero no me gustaria dejar a mi delphi quisiera encontrar la solución adecuada con este lenguaje.

Cañones
23-11-2012, 00:39:30
Buenas, llego tarde pero aporto una idea.
Yo haría que los clientes digitalicen y que mediante VPN o FTP manden los documentos al servidor.
En el servidor tu aplicación cargando todo lo que le van pasando en la DB.
Lo bueno de esto es que si se te cae la conexión en cualquier cliente puede seguir digitalizando y cuando vuelva la conexión se transfieran los datos. También se pueden definir procesos para que la transferencia se haga por la noche para no ocupar el ancho de banda y durante el día se utiliza la conexión para consultar documentos ya cargados en la DB y sería optimo.

AzidRain
23-11-2012, 01:26:22
Yo creo que el tema principal de nuestro amigo es: "¿Cual es la manera más eficiente enviar un archivo local a un servidor remoto?". Esto solo se puede hacer de dos formas:

1.- Enviarlo por FTP (simple de hacer)
Ventajas:
No tienes que programar el software hay muchísimos servidores libres y bastante potenes que puedes utilizar.
Delphi ya trae componentes listos para conectarse y hacer lo que deseas
No te tienes que preocupar por concurrencias, el software servidor hace todo el trabajo
Funciona hasta con una conexión de modem telefónico.

Desventajas:
Puede ser algo lento si tienes demasiadas conexione y el software no lo tienes bien calibrado.
Hay que escribir un poco más de código para transmitir el archivo.

2.- Guardarlo en una carpeta de red (que puede ser trabajar sobre VPN)
Ventajas:
Tu programa puede correr sin modificar nada pues la carpeta "\\servidor" puerde residir en cualquier localidad independientemente de la red real donde este trabajando.
Para los usuarios es más transparente.

Desventajas:
Requieres gran ancho de banda para un comportamiento mas o menos "normal", pues no es lo mismo una LAN a 100 Mbs que una conexión de banda ancha de 20 Mbs que además es compartida entre varios equipos dentro de la red. Lo ideal para esos casos es un enlace dedicado lo cual es algo costoso para muchas empresas.
Hay que configurar la VPN lo cual para que de buenos resultados requiere hardware adicional (routers) en cada punto de conexión (oficina) y conocimientos avanzados de redes para mantenerla.

Mi conclusión:
Si tu cliente tiene el dinero para invertir en enlaces dedicados e infraestructura de red decente, entonces vamonos por VPN; de lo contrario mejor la opción de FTP.

JAI_ME
23-11-2012, 21:16:36
Muchas gracias por sus respuestas, creo que seria una buena opción el uso de FTP, pues básicamente lo que pretendo es que cuando un cliente escanee a traves de la aplicación delphi y procese el formulario indicado todo se guarde en el servidor.

Si el FTP me soluciona este problema seria grandioso ya que les entendí que requiere de menos ancho de banda y es mas económico.

pero cuales serian las configuraciones o componentes que debería usar para la conexion remota entre cliente y servidor a través de FTP para que funcione mi aplicación.

por recordarles el tema principal, el cliente debe procesar un formulario y escanear uno o varios archivos todo esto debe ir al servidor. (la información del formulario se guardará en la base de datos y los archivos escaneados a un directorio físico en el servidor).

AzidRain
24-11-2012, 00:42:33
Con FTP lo resuelves entonces. Necesitas utilizar algún componente para conectarse al servidor (la pestaña Indy tiene uno), solo lo configuras indicando a que dirección se va a conectar y con una instrucción subes el archivo. Hay muchos ejemplos en la red.

Por el lado del servidor, solo necesitas instalar el software, te recomiendo FileZilla Server, es libre y bastante sencillo de configurar. Recuerda que debes configurar en este software y cualquier otr FTP, al menos un usuario con su contraseña y las carpetas del servidor a donde va a tener acceso ese usuario, que obviamente será tu aplicación.

LO puedes implementar muy sencillamente así:

1.- El cliente escanea su documento
2.- Ya escaneado el documento se envía al servidor FTP (habrá que definir un nombre para él, o bien generar uno aleatorio y que el usuario describa que contiene)
3.- Si todo salió bien y se subió sin problema, grabar en la tabla de la BD el nombre de archivo y la descripcion que le puso el usuario.

Para acceder al archivo hacemos lo contrario:

1.- El cliente consultar la tabla de la BD hasta encontrar su archivo
2.- Al encontrarlo se solicita o descarga dicho archivo mediante FTP utilizando los datos que obtuvimos al consultar la tabla
3.- El usuario lo guarda en forma local

Una ventaja adicional es que puedes tener un servidor para la base de datos y otro distinto para guardar los archivos ya que la conexion FTP no tiene que ser forzosamente al mismo servidor que mantiene la base de datos. Por ejemplo, puedes tener el servidor de BD en una ciudad y los archivos físicos en otra diferente.

Si quieres mas info te pongo un ejemplo de como se hace, esta unidad sube un archivo a un servidor previamente configurado:


unit uCFD_FTP;


interface
uses IdFTP;
const FTP_USERNAME = 'usuario';
FTP_PASSWORD = 'password';


procedure CFD_UpLoad(aOrFile,aDestFile:string);
procedure CFD_UpLoadFiles(aXMLOrfile,aXMLDestFile,aPDFOrFile, aPDFDestFile: string);




implementation

procedure CFD_UpLoad(aOrFile,aDestFile:string);
var Servidor: TIdFTP;
begin
Servidor := TIdFTP.Create(nil);
try
Servidor.Passive := TRUE;
Servidor.Username := FTP_USERNAME;
Servidor.Password := FTP_PASSWORD;
Servidor.Host := (poner aqui la IP o direccion del servidor FTP)
Servidor.Connect; // Conectarse
Servidor.Put(aOrFile,aDestFile); //subir el archivo
Servidor.Disconnect; //desconectarse


finally
Servidor.Free;
end;

end;


// Este es lo mismo solo que sube 2 archivos distintos...
procedure CFD_UpLoadFiles(aXMLOrfile,aXMLDestFile,aPDFOrFile, aPDFDestFile: string);
var Servidor: TIdFTP;
Begin
Servidor := TIdFTP.Create(nil);
try
Servidor.Passive := TRUE;
Servidor.Username := FTP_USERNAME;
Servidor.Password := FTP_PASSWORD;
Servidor.Host := capadatos.Conexion.HostName;
Servidor.Connect;
Servidor.Put(aXMLOrFile ,aXMLDestFile);
Servidor.Put(aPDFOrFile ,aPDFDestFile);
Servidor.Disconnect;


finally
Servidor.Free;
end;

End;

end.


Con eso ya puedes hacer bastante.

newtron
24-11-2012, 09:01:24
Pues yo no lo veo tan claro.

Efectivamente el archivo lo puede subir al servidor por ftp pero... ¿qué pasa con la conexión remota a la BBDD? (solo es por incordiar un poco :D).

Casimiro Notevi
24-11-2012, 11:57:37
Pues yo no lo veo tan claro.
Efectivamente el archivo lo puede subir al servidor por ftp pero... ¿qué pasa con la conexión remota a la BBDD? (solo es por incordiar un poco :D).

Claro, si además de la imagen escaneada también tiene que actualizar datos en la BD, necesita una conexión a la misma, necesitaría poquito ancho de banda, pero es una conexión. Por lo tanto, no es un incordio lo que dices, es un problemita que hay que solucionar.

Si no se quiere hacer con una conexión directa a la BD a través de internet, entonces habría que inventar algo diferente, por ejemplo, cada cliente tiene su programa cliente que escanea, guarda los datos en un fichero txt/csv/xml y envía ambos al servidor por ftp.
Ese fichero txt/csv/xml puede tener una estructura más o menos así:
escaneo123.txt
imagen=escaneo123.jpg
fecha=24.1.2012
hora=11:43
comentario=Documento de tal y cual para no se qué.
otrocampo=bla, bla, bla...
otrocampomas=ble,ble,ble...

El ftp subiría escaneo123.jpg y escaneo123.txt

Y en el lado del servidor, un programita que va chequeando el directorio donde llegan los envíos por ftp, este programita comprueba si hay algún fichero txt y si lo hay entonces lo lee, lo procesa y almacena en la base de datos según el contenido del mismo arriba indicado y busca el jpg con el mismo nombre, este lo movería al directorio correspondiente donde van los jpg o lo almacena en la BD, a gusto del consumidor.

Ahora bien, para consultas... no ha explicado nada JAI_ME, así que eso es lo que hay con lo que nos ha contado.

JAI_ME
28-11-2012, 21:55:38
Gracias a su ayuda he terminado la aplicación para enviar las imágenes por FTP, pero como nos comenta nuestro amigo newtron

Empezado por newtron
Pues yo no lo veo tan claro.
Efectivamente el archivo lo puede subir al servidor por ftp pero... ¿qué pasa con la conexión remota a la BBDD? (solo es por incordiar un poco ).

La aplicación tiene que trabajar como cliente/servidor, es decir, cualquier usuario desde cualquier localidad puede ejecutar una consulta en tiempo real que halla ingresado otra persona.

Al parecer por ftp no creo solucionemos este problema, como comenta Casimiro Notevi puede ser una solución para guardar un registro, pero al parecer no mas recomendado.

Que otra opción me recomiendan. ????

normalmente como se conectan varios usuarios a una base de datos centralizada desde distintas ciudades ????

gracias de nuevo.

Casimiro Notevi
28-11-2012, 22:27:54
Pues directamente, como si fuese red local.
La otra opción creo que se ha comentado, usar terminal server, ultravnc, etc.

JAI_ME
28-11-2012, 22:52:15
La verdad no estoy muy seguro, nunca he usado terminal server, pero si ultravnc, teamviewer o logmein, y estos últimos al hacer la conexion remota hacen uso de la pantalla remota, es decir, 2 o mas usuarios no podrían trabajar sobre el mismo equipo porque como les comente compartirían la pantalla (si hay una opción para compartir la CPU y que cada usuario fuese una extención de ella, les agradecería la compartieran)

Claro, me llama mas la atención que se instalase en cada cliente la misma aplicación y si en caso no hubiese conexión al servidor no hiciera nada.

Casimiro Notevi
28-11-2012, 23:37:45
Es que lo que se hace es poner un equipo que sea "servidor de terminal server", ahí va el programa ejecutable tuyo, y desde fuera los usuarios se conectan a ese equipo servidor, cada uno con su usuario. Es necesario que sea rapidito y tenga bastante memoria ram. Si son más de 5 ó 10 usuarios entonces puedes poner dos equipos.

AzidRain
29-11-2012, 00:25:08
Pues yo creo que ya lo tienes resuelto. El que utilices FTP para subir y bajar las imagenes no quiere decir que tu programa no sea cliente/servidor (de hecho ya tienes un cliente FTP y un servidor FTP por lo que veo). Si te refieres a que el usuario cuando abra un registro de la tabla vea magicamente la imagen, pues se complica un poco, sobre todo si son imagenes pesadas ni con terminal server, uvnc u algo paraceido vas a lograr el mismo rendimiento que en una red local. Tu aplicación si funcionará en tiempo real ya que lo que acaba de subir un usuario lo pueden descargar cualesquiera otros. Recuerda que la conexion FTP queda oculta al usuario.