none
Enlazar web service con aplicación de consola RRS feed

  • Pregunta

  • Hola.
    Tengo una consulta que hacerles y agradecere mucho su orientación

    Tengo un web service ya funcional pero hay una característica en especial que no e logrado resolver de la manera esperada..

    El web service recibe un archivo xml y extrae un dato, ese dato debe existir en una lista, si el dato existe dentro de la lista la respuesta es TRUE de lo contrario, FALSE.

    El problema es con la lista, esa lista esta dividida en dos o mas partes de mas o menos 500MB no quiero acceder a la lista por cada consulta que se haga ni almacenar la información en una BD mi requerimiento es tenerla en memoria.

    Cuando el servicio inicia esta vació y al recibir la primera petición verifica si la lista esta cargada sino es así entonces la carga y hasta ahí no hay problema. El problema es que hay que actualizar la lista cada 24 hrs entonces hice una app en consola que se encarga de la descarga pero al mandar a llamar el método definido en el servicio para actualizar la lista me crea una copia de esa lista.
    Mi problema es que no logro mantener un solo ambiente 

    Ambiente uno: Servicio y clientes del servicio ven una lista en memoria

    Ambiente dos: app consola y servicio ven otra lista en memoria

    [Edite la pregunta para dar un poco más de detalle]
    En una Solución Visual Studio tengo dos proyectos:

    -Proyecto  Web Service SOAP: en el archivo asmx tengo definido el WebMethod que recibe el dato a validar en la lista que mencione. En este servicio hay una clase donde tengo definido una Hashtable como static con los datos que los de la lista y los métodos ValidarDato() y ActualizarLista().

    -Proyecto AppConsola: a este proyecto agregue una referencia al proyecto Web Service para poder acceder a la clase donde se encuentra el método ActualizarLista() y actualizar los datos de la Hashtable.

    En una sola frase: Como puedo construir un web servicie que actualice sus recursos y modifique su configuración desde una consola de comandos?

    Espero me puedan orientar o brindar alguna referencia donde pueda investigar este concepto.
    • Editado FredoAR domingo, 20 de agosto de 2017 21:49 Intento ser más claro en la explicación del problema.
    domingo, 20 de agosto de 2017 17:41

Respuestas

  • Suponiendo que tanto los clientes como la app de consola llaman AL MISMO servicio, entonces es muy sencillo: basta con que el servicio declare la lista como estática y todos los clientes (incluida la aplicación de consola) verán la misma lista.

    Si no es así como tienes montado el servicio, tendrás que darnos un poco más de información acerca de cómo lo tienes organizado para que podamos inferir cómo se debe manejar la lista en memoria.

    domingo, 20 de agosto de 2017 21:18
    Moderador
  • hola

    >>El web service recibe un archivo xml y extrae un dato, ese dato debe existir en una lista, si el dato existe dentro de la lista la respuesta es TRUE de lo contrario..

    porque un xml ? se trata de un web service asmx o quizas de WCF o sea un .svc, porque si es asi podria haber expuesto una List<> de una clase que definas en lugar de un xml

    >>En este servicio hay una clase donde tengo definido una Hashtable como static con los datos que los de la lista y los métodos ValidarDato() y ActualizarLista().

    Pero si es static ese dato es global al sitio, o sea no importa quien los invoque compartira la misma informacion, se comporta como el objeto Application de asp.net

    >>Mi problema es que no logro mantener un solo ambiente

    a que llamas ambiente ? porque si el sitio del web service es uno solo la variable static deja los datos disponibles para todas las llamadas

    >>Como puedo construir un web servicie que actualice sus recursos y modifique su configuración desde una consola de comandos?

    en principio el web service no puede invocar a la consola para tomar datos, sino que es el cliente quien invoca al servicio web

    quizas debas crear una aplicacion que actue como scheduler, puede ser esta aplicacion de consola o un servicio de windows que use un timer o libreria de scheduler para cada cierto tiempo realiza la accion de actualizar

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 21 de agosto de 2017 14:22

Todas las respuestas

  • Suponiendo que tanto los clientes como la app de consola llaman AL MISMO servicio, entonces es muy sencillo: basta con que el servicio declare la lista como estática y todos los clientes (incluida la aplicación de consola) verán la misma lista.

    Si no es así como tienes montado el servicio, tendrás que darnos un poco más de información acerca de cómo lo tienes organizado para que podamos inferir cómo se debe manejar la lista en memoria.

    domingo, 20 de agosto de 2017 21:18
    Moderador
  • hola

    >>El web service recibe un archivo xml y extrae un dato, ese dato debe existir en una lista, si el dato existe dentro de la lista la respuesta es TRUE de lo contrario..

    porque un xml ? se trata de un web service asmx o quizas de WCF o sea un .svc, porque si es asi podria haber expuesto una List<> de una clase que definas en lugar de un xml

    >>En este servicio hay una clase donde tengo definido una Hashtable como static con los datos que los de la lista y los métodos ValidarDato() y ActualizarLista().

    Pero si es static ese dato es global al sitio, o sea no importa quien los invoque compartira la misma informacion, se comporta como el objeto Application de asp.net

    >>Mi problema es que no logro mantener un solo ambiente

    a que llamas ambiente ? porque si el sitio del web service es uno solo la variable static deja los datos disponibles para todas las llamadas

    >>Como puedo construir un web servicie que actualice sus recursos y modifique su configuración desde una consola de comandos?

    en principio el web service no puede invocar a la consola para tomar datos, sino que es el cliente quien invoca al servicio web

    quizas debas crear una aplicacion que actue como scheduler, puede ser esta aplicacion de consola o un servicio de windows que use un timer o libreria de scheduler para cada cierto tiempo realiza la accion de actualizar

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 21 de agosto de 2017 14:22