none
Recepción de datos con Servicio? RRS feed

  • Pregunta

  • Hola

    Tengo el siguiente escenario:

    - Recibo datos de n usuarios (vía gprs) cada cierto tiempo (los tiempos varían pero 'puede' ocurrir (de hecho la probabilidad es alta) que reciba al mismo tiempo datos de m usuarios (m<=n))

    - Al recibir los datos debo guardarlos en una BD, aquí tengo una interrogante pues no se si será lo mas correcto, procesarlos y luego guardarlos debido a la cantidad de datos que pudiera recibir, y el sistema debería responder lo mas rápido posible, diría que casi en tiempo real ó si debería directamente separar cada dato y guardarlos, y en el momento de consultarlos que estos sean procesados.

    - Los datos serán mostrados vía web, para lo que utilizo ASP.net

    * Nunca cree un servicio de windows, pero he estado leyendo y es lo que me parece idóneo para esta situación, pues no seria buena idea dar acceso a la BD sino que las operaciones se realicen a través del servicio de windows y que este reciba e inserte los datos en la misma. Voy bien?

    Por otro lado como comentaba, nunca cree servicios, así que ignoro cual seria la manera de conectar el servicio con los n usuarios?

    una posible solución que se me ocurre por el problema derivado de la recepción de datos al mismo tiempo (concurrencia), seria, recibir datos y guardarlos en una cola para con otro hilo ir insertándolos y/o procesandolos, pero no se si esto sería factible. 

    En fin, que tan lejos estoy de 'la verdad'? Como resolverían ustedes el problema?

     

    La arquitectura está pensada de forma que el host de la BD no esté disponible desde Internet, solo estaría disponible el Host del servidor web (obvio :D) y supongo que en este debería adicionar el servicio para que realice las inserciones en la BD, Afectaría mucho el rendimiento? Conviene tener el servicio en otra PC, quizas en el mismo Host de la BD?

                    Saludos y gracias por sus sugerencias y ayuda.


    • Editado Cruznick miércoles, 11 de enero de 2012 15:52
    miércoles, 11 de enero de 2012 15:51

Respuestas

  • aquí tengo una interrogante pues no se si será lo mas correcto, procesarlos y luego guardarlos debido a la cantidad de datos que pudiera recibir

    si la aplciacion demanda una alta performance lo que se suele hacer es aplciar sobre los datos recibidos una validacion minima y luego se registra en algun sistema de colas o similar para que un proceso con mas tiempo los procese en segundo plano

    de esta forma la respuesta se obtiene pero se deja pendiente la operacion en una queue

     

    para lo que utilizo ASP.net  ...Nunca cree un servicio de windows...sí que ignoro cual seria la manera de conectar el servicio con los n usuarios?

    aqui me perdi, la aplciacion puede ser web y tambien definir web service para facilitar la comunicacion

    pero los servicio de windows no se si tienen que ver con esto que planteas, salvo como comente si creas un proceso que cada cierto timepo procese las transacciones registradas y confirme la operacion

    una posible solución que se me ocurre por el problema derivado de la recepción de datos al mismo tiempo (concurrencia), seria, recibir datos y guardarlos en una cola para con otro hilo ir insertándolos y/o procesandolos, pero no se si esto sería factible

    es justo lo que planteaba

     

    supongo que en este debería adicionar el servicio para que realice las inserciones en la BD, Afectaría mucho el rendimiento?

    pero la db final dodne se encontraria ? porque si es un hosting simple el que defines no creo que puedas crear un servicio de windows para instalar

    o sea ese servicio de windows debera estar en una pc local de tu red y recuperar los registros de la db que esta en la web

    por eso quizas se requieren dos servicio web uno para registrar y otro para recuperar, el cliente registra y el servicio valida lo minimo he insert

    el windows service en la red lcoal recupera de la web procesa y registra en firme la operacion, aplicando todas las validaciones y workflow que hagan falta

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Cruznick jueves, 12 de enero de 2012 12:58
    miércoles, 11 de enero de 2012 16:03
  • me hace preguntarme si no seria mas factible hacerlo con webservice desde un principio

    es que en un servicio web no puede implementar un scheduler para realziar tareas automaticas cada cierto tiempo

    lose web service requieres que un cliente los invoque, ello por si solo no puede realizar tareas, por eso indicaba que el windows service desde tu red invocaria al servicio web alojado en el server del hosting para tomar la info y procesarla

     

    a que te refieres con hosting simple: a un hosting donde publico mi web

    un hosting que contraras por lo general es simple, puedes publicar un desarrollo web y tienes una consola de adminostracion pero no puede instalar aplciaciones alli

    si tienes un housing la cosa cambia porque ahi los servidores son tuyos, el ISP solo provee el vinculo, ahi si podrias instalar un servicio windows en la pc del servidor web

     

    si usas Azure este tiene el concepto de Worker Rol, que serian los servicio windows en la web

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Cruznick jueves, 12 de enero de 2012 12:58
    miércoles, 11 de enero de 2012 16:32
  • Saludos Cruznick, haz lo siguiente, sientate tomate un cafe y vamos a pensar como diria un amigo mio :). hay un detalle y es que aun no sabemos nada del tipo de informacion que los usuarios enviaran y que tu servicio web validara, por aqui se hace un poco dificil.

    Lo primero es que hara el cliente web, luego que hara el servidor entonces viene la concurrencia. STOP, aqui debemos de pararnos a pensar mas a fondo, por que como dices quieres algo que sea en tiempo real.

    Por que no haces lo siguiente.

    en el servidor montas un servicio web que sea capaz de recibir las peticiones que le hacen los clientes remotamente, y que este guarde en una cola(tabla de colas) como comenta @Leandro, las peticiones de cada uno. entonces en el servidor tendras un servicio de windows que inspeccione cada cierto tiempo como lo desees y que este se encargue de resolver la parte de guardar la informacion en el lugar correspondiente, claro se supone que antes de poner la info en la cola ya el servicio debe de haber validado dicha info

    entonces el servicio web que se comunica con los usuarios como dices tendra una validacion que le dira a el usuario, "Mira tio la info que me pasas esta correcta, tu peticion se esta realizando"

    de esta forma comunicas al usuario que su peticion ha sido correcta y que se esta realizando

    Esta arquitectura la podrias montar con WCF para la parte del servicio web y la parte del servicio local ya que en wcf te permite hostear un servicio localmente sin necesidad de utilizar un IIS puedes ver algo de SelfHosting WCF aqui 

    Pero piensa en algo y es que esto te puede dar un dolor de cabeza que te mueres, ya que esto que intestas montar a la hora de mantenerlo si estas solo que Dios se Apiade de Ti :)

    Saludos.

     


    Luis Y. Ramirez "Recuerda marcar la repuesta como VALIDA si te ha ayudado"
    • Marcado como respuesta Cruznick jueves, 12 de enero de 2012 12:58
    miércoles, 11 de enero de 2012 17:07

Todas las respuestas

  • aquí tengo una interrogante pues no se si será lo mas correcto, procesarlos y luego guardarlos debido a la cantidad de datos que pudiera recibir

    si la aplciacion demanda una alta performance lo que se suele hacer es aplciar sobre los datos recibidos una validacion minima y luego se registra en algun sistema de colas o similar para que un proceso con mas tiempo los procese en segundo plano

    de esta forma la respuesta se obtiene pero se deja pendiente la operacion en una queue

     

    para lo que utilizo ASP.net  ...Nunca cree un servicio de windows...sí que ignoro cual seria la manera de conectar el servicio con los n usuarios?

    aqui me perdi, la aplciacion puede ser web y tambien definir web service para facilitar la comunicacion

    pero los servicio de windows no se si tienen que ver con esto que planteas, salvo como comente si creas un proceso que cada cierto timepo procese las transacciones registradas y confirme la operacion

    una posible solución que se me ocurre por el problema derivado de la recepción de datos al mismo tiempo (concurrencia), seria, recibir datos y guardarlos en una cola para con otro hilo ir insertándolos y/o procesandolos, pero no se si esto sería factible

    es justo lo que planteaba

     

    supongo que en este debería adicionar el servicio para que realice las inserciones en la BD, Afectaría mucho el rendimiento?

    pero la db final dodne se encontraria ? porque si es un hosting simple el que defines no creo que puedas crear un servicio de windows para instalar

    o sea ese servicio de windows debera estar en una pc local de tu red y recuperar los registros de la db que esta en la web

    por eso quizas se requieren dos servicio web uno para registrar y otro para recuperar, el cliente registra y el servicio valida lo minimo he insert

    el windows service en la red lcoal recupera de la web procesa y registra en firme la operacion, aplicando todas las validaciones y workflow que hagan falta

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Cruznick jueves, 12 de enero de 2012 12:58
    miércoles, 11 de enero de 2012 16:03
  • aquí tengo una interrogante pues no se si será lo mas correcto, procesarlos y luego guardarlos debido a la cantidad de datos que pudiera recibir

    si la aplciacion demanda una alta performance lo que se suele hacer es aplciar sobre los datos recibidos una validacion minima y luego se registra en algun sistema de colas o similar para que un proceso con mas tiempo los procese en segundo plano

    de esta forma la respuesta se obtiene pero se deja pendiente la operacion en una queue

     

    para lo que utilizo ASP.net  ...Nunca cree un servicio de windows...sí que ignoro cual seria la manera de conectar el servicio con los n usuarios?

    aqui me perdi, la aplciacion puede ser web y tambien definir web service para facilitar la comunicacion

    pero los servicio de windows no se si tienen que ver con esto que planteas, salvo como comente si creas un proceso que cada cierto timepo procese las transacciones registradas y confirme la operacion

    una posible solución que se me ocurre por el problema derivado de la recepción de datos al mismo tiempo (concurrencia), seria, recibir datos y guardarlos en una cola para con otro hilo ir insertándolos y/o procesandolos, pero no se si esto sería factible

    es justo lo que planteaba

     

    supongo que en este debería adicionar el servicio para que realice las inserciones en la BD, Afectaría mucho el rendimiento?

    pero la db final dodne se encontraria ? porque si es un hosting simple el que defines no creo que puedas crear un servicio de windows para instalar

    o sea ese servicio de windows debera estar en una pc local de tu red y recuperar los registros de la db que esta en la web

    por eso quizas se requieren dos servicio web uno para registrar y otro para recuperar, el cliente registra y el servicio valida lo minimo he insert

    el windows service en la red lcoal recupera de la web procesa y registra en firme la operacion, aplicando todas las validaciones y workflow que hagan falta

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    O_o No me había percatado de la existencia del webservice gracias leandro...

    O sea... implemento una validación mínima al recibir los datos y en otro hilo los proceso mas a fondo (por tu respuesta intuyo que con un web service esto no seria posible, verdad? lo que me deja la opción del windows service)

    para lo que utilizo ASP.net  ...Nunca cree un servicio de windows...sí que ignoro cual seria la manera de conectar el servicio con los n usuarios?

    aqui me perdi, la aplciacion puede ser web y tambien definir web service para facilitar la comunicacion

    pero los servicio de windows no se si tienen que ver con esto que planteas, salvo como comente si creas un proceso que cada cierto timepo procese las transacciones registradas y confirme la operacion

    Es que apuntaba a un servicio Windows, los host (servidor web y servidor BD) serian de mi propiedad, no contratados, cosa que cambiará mas adelante, momento en el que el servicio windows debería sustituirlo por un servicio web, lo que me hace preguntarme si no seria mas factible hacerlo con webservice desde un principio, por lo que el procesado 'profundo' de los datos lo haría cuando se realicen las consultas (servidor web)

     

    supongo que en este debería adicionar el servicio para que realice las inserciones en la BD, Afectaría mucho el rendimiento?

    pero la db final dodne se encontraria ? porque si es un hosting simple el que defines no creo que puedas crear un servicio de windows para instalar

    o sea ese servicio de windows debera estar en una pc local de tu red y recuperar los registros de la db que esta en la web

    por eso quizas se requieren dos servicio web uno para registrar y otro para recuperar, el cliente registra y el servicio valida lo minimo he insert

    el windows service en la red lcoal recupera de la web procesa y registra en firme la operacion, aplicando todas las validaciones y workflow que hagan falta

    Acá me perdí un poco yo T.T...... a que te refieres con hosting simple: a un hosting donde publico mi web, pero que no está la BD, que estaría en una PC local, digamos en casa? Digamos que esa seria otra opción y por lo que veo pues también seria mejor el web service para este caso, verdad?

    * La inserción de los datos no va a ser a través de la pagina, estos los recibo vía gprs

     

    Gracias por la ayuda...

     

     

     

    miércoles, 11 de enero de 2012 16:23
  • me hace preguntarme si no seria mas factible hacerlo con webservice desde un principio

    es que en un servicio web no puede implementar un scheduler para realziar tareas automaticas cada cierto tiempo

    lose web service requieres que un cliente los invoque, ello por si solo no puede realizar tareas, por eso indicaba que el windows service desde tu red invocaria al servicio web alojado en el server del hosting para tomar la info y procesarla

     

    a que te refieres con hosting simple: a un hosting donde publico mi web

    un hosting que contraras por lo general es simple, puedes publicar un desarrollo web y tienes una consola de adminostracion pero no puede instalar aplciaciones alli

    si tienes un housing la cosa cambia porque ahi los servidores son tuyos, el ISP solo provee el vinculo, ahi si podrias instalar un servicio windows en la pc del servidor web

     

    si usas Azure este tiene el concepto de Worker Rol, que serian los servicio windows en la web

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Cruznick jueves, 12 de enero de 2012 12:58
    miércoles, 11 de enero de 2012 16:32
  • Saludos Cruznick, haz lo siguiente, sientate tomate un cafe y vamos a pensar como diria un amigo mio :). hay un detalle y es que aun no sabemos nada del tipo de informacion que los usuarios enviaran y que tu servicio web validara, por aqui se hace un poco dificil.

    Lo primero es que hara el cliente web, luego que hara el servidor entonces viene la concurrencia. STOP, aqui debemos de pararnos a pensar mas a fondo, por que como dices quieres algo que sea en tiempo real.

    Por que no haces lo siguiente.

    en el servidor montas un servicio web que sea capaz de recibir las peticiones que le hacen los clientes remotamente, y que este guarde en una cola(tabla de colas) como comenta @Leandro, las peticiones de cada uno. entonces en el servidor tendras un servicio de windows que inspeccione cada cierto tiempo como lo desees y que este se encargue de resolver la parte de guardar la informacion en el lugar correspondiente, claro se supone que antes de poner la info en la cola ya el servicio debe de haber validado dicha info

    entonces el servicio web que se comunica con los usuarios como dices tendra una validacion que le dira a el usuario, "Mira tio la info que me pasas esta correcta, tu peticion se esta realizando"

    de esta forma comunicas al usuario que su peticion ha sido correcta y que se esta realizando

    Esta arquitectura la podrias montar con WCF para la parte del servicio web y la parte del servicio local ya que en wcf te permite hostear un servicio localmente sin necesidad de utilizar un IIS puedes ver algo de SelfHosting WCF aqui 

    Pero piensa en algo y es que esto te puede dar un dolor de cabeza que te mueres, ya que esto que intestas montar a la hora de mantenerlo si estas solo que Dios se Apiade de Ti :)

    Saludos.

     


    Luis Y. Ramirez "Recuerda marcar la repuesta como VALIDA si te ha ayudado"
    • Marcado como respuesta Cruznick jueves, 12 de enero de 2012 12:58
    miércoles, 11 de enero de 2012 17:07
  • Hola leandro

    "es que en un servicio web no puede implementar un scheduler para realziar tareas automaticas cada cierto tiempo

    lose web service requieres que un cliente los invoque, ello por si solo no puede realizar tareas, por eso indicaba que el windows service desde tu red invocaria al servicio web alojado en el server del hosting para tomar la info y procesarla"

     

    Si, me refería a hacer el proyecto con webservice, por si fuese necesario mas adelante el uso de un hosting simple... Gracias por la ayuda 

    miércoles, 11 de enero de 2012 17:25
  • Hola Luis

    Te agradezco la ayuda y el café (prefiero un refresco o una cerveza ;-) )... los datos que recibo, aun falta por definirlos bien, pero serán de no mas de 25-50MB por mes por cada usuario, ahora te aclaro: cuando hablo de 'usuario' no me refiero a alguien que accede a la web e ingresa los datos, sino a un 'dispositivo que está tomando datos y enviándolos (cada cierto tiempo) vía gprs, lógicamente van a haber usuarios, ahora si me refiero a personas, que van a consultar esta información a través del sitio web....

    en resumen esto es lo que ocurre:

    - n dispositivos envían datos,  los datos de algunos dispositivos pudieran llegar al mismo tiempo

    - Estos datos serán mostrados a través del sitio, cuando sea solicitado por algún usuario

    Mi intención era crear un servicio (en principio, pensaba en un servicio windows, ahora tendré que definir si será web, según lo que me ha estado comentando leandro) que medie entre los dispositivos y la BD, que valide los datos y los guarde en la base... luego pues desde el sitio realizar las consultas a la base de datos normalmente desde mi sitio (ASP.net)...

                                    Saludos

    miércoles, 11 de enero de 2012 17:48