none
SERVICIO WEB para CAPA DE DATOS. Por favor, es urgente! RRS feed

  • Pregunta

  • Hola, buenas. Mi solución, Visual Studio C#, y Access, consta de dos proyectos,

    -el 1º de Windows forms (Para ingresar datos en base de datos y modificarlos, y para generar páginas aspx del 2º proyecto), 

    -el 2º es de Web forms asp.net. (Para mostrar y gestionar datos introducidos en la base de datos mediante págs. aspx, es decir, podrá modificarse la bdd desde estas páginas).

    En principio la base de datos se encuentra en bin/debug del proyecto de Windows forms, todo iba bien en ese proyecto,  pero el segundo ya ahí no me la encontraba sin poner ruta absoluta, me indicaron varias formas para solucionarlo pero ahora, según requisitos, la solución es AGREGAR UN SERVICIO WEB QUE SE ENCARGUE DE LA CAPA DE DATOS (creo que tempuri.org ), el 1º proyecto se va a usar localmente, pero el 2º genera aspx que se mostrarán en un servidor.

    ¿Qué pasos he de seguir para poder hacer esto?, no comprendo la idea del servicio web para encargarse de la capa de datos. No se si he de agregarlo a los 2 proyectos, el primero no creo que me lo permita siendo de winforms. Y ¿cómo puedo agregarlo al 2º y utilizarlo? ¿Cómo hago para que sea la misma base de datos que la que utiliza el 1º?

    Muchas gracias, y ayúdenme por favor, es realmente importante.

    viernes, 9 de octubre de 2015 11:37

Respuestas

  • Hola, muchísimas gracias, si pudiera utilizar esta opción que me indica, aunque necesitaría que fuera con Access, y así me ahorrara cambiar la aplicación de Windows forms, si que sería muy buena opción, aunque entiendo que no sea tan eficiente como utilizar capas.

    Claro, tendría que seguir utilizando el servicio web para el proyecto de webforms, para visualizar las páginas aspx, e incluirlo en el proyecto de web forms ¿no es así?

    No en el proyecto Web Forms tendrás tus páginas aspx.

    Luego depende de la estrategia que utilices para el acceso a datos. Puedes establecer la conexión a la base de datos desde el código de las páginas aspx, como haces en la aplicación Windows Forms. O crear una capa de servicios web que encapsulen el acceso a datos.

    Yo te recomendaría esta última opción por:

    - El código queda más estructurado y, por consiguiente, es más mantenible

    - Si en un futuro decides modificar tu aplicación Windows Forms para que acceda a la base de datos a través de servicios web ya tendrías parte del trabajo hecho

    Por otra parte, ¿cómo ubico la base de datos en una ruta de red y se la indico a los proyectos?. Estoy buscando en internet, pero no se, no encuentro la forma.


    Deberías compartir una carpeta en el equipo que va a hacer la función de servidor y darle permisos de acceso y escritura tanto a los usuarios que van a utilizar la aplicación Windows Forms, como al usuario del pool de tu sitio web.

    Luego en cada una de las aplicaciones, en la cadena de conexión para establecer la conexión a la base de datos indicas la ruta del archivo Access como \\equipo-servidor\carpeta-compartida\miBaseDeDatos.accdb


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta Elena_Nueva sábado, 10 de octubre de 2015 10:16
    sábado, 10 de octubre de 2015 10:00

Todas las respuestas

  • >>En principio la base de datos se encuentra en bin/debug del proyecto de Windows forms

    si usas servicio web y son estos los que acceden porque la db esta alli

    si el attach es dinamico la db deberia estar en el App_Data del proyecto web

    la aplicacion winform no deberia tener la db porques esta no se conecta directo a esta, sino que son los servicio, es alli dodne deberias poner la db

    o mejor si la db la adjuntas directo al servicio de sql server

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 9 de octubre de 2015 12:29
  • Hola, le agradezco mucho me responda.

    Si el archivo de Access debe de estar en el App_Data del proyecto web, entonces ¿Cómo lo utiliza el proyecto de Windows forms? Entiendo que no ha de conectarse directamente a la db, si no con el servicio web pero ¿Cómo hago entonces que la encuentre para poder manipularla? 

    Y ¿cómo añado el servicio web? ¿he de añadirlo al proyecto de webforms? ¿qué pasos he de seguir para ello? ¿Cómo es eso de adjuntarla directamente?

    Gracias de nuevo, lamento mi ignorancia, un saludo.

    viernes, 9 de octubre de 2015 16:53
  • Hola, por favor, ¿alguna ayuda más?

    No entiendo cómo puedo usar la bdd a través del servicio web desde la aplicación de Windows forms (que ya funciona y la utiliza directamente, porque la tiene en bin/debug ¿He de cambiarla de sitio, no es así? Y cambiándola, ¿tendré también que cambiar entonces la implementación del proyecto de winforms?) Ni tampoco se como añadirla al proyecto de web forms asp.net utilizando el servicio web,

    Por favor, oriéntenme un poco más sobre esto. Muchas gracias.

    sábado, 10 de octubre de 2015 6:42
  • Hola Elena,

    la cuestión es que si quieres implementar tu capa de acceso a datos la aplicación Windows Forms no debería acceder directamente a la base de datos, debería hacerlo a través de la capa de datos, es decir, de Web Services.

    Por ejemplo, si ahora para dar de alta un artículo realizas una INSERT sobre la tabla Artículos, lo que deberías hacer es implementar un Web Service que exponga un método para dar de alta los artículos. La aplicación Windows Forms, cuando quiera dar de alta un artículo, llamará al servicio web pasándole los datos del nuevo artículo. El servicio web será quien realice la INSERT sobre la tabla Artículos con los datos recibidos.

    De esta forma únicamente la aplicación web tiene acceso directo a la base de datos y, como te comenta Leandro, el sitio habitual para ubicarla es la carpeta AppData del proyecto web.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    sábado, 10 de octubre de 2015 7:43
  • Hola, buenos días, gracias por responderme, entiendo (aunque no se como agregarlo) la idea de que tendré que agregar al servicio web (entiendo que al service.cs) cada una de las funciones que hace el proyecto de Windows forms sobre la base de datos y que éste llame al servicio web para hacerlas (tampoco se como hacer que lo llame ni que lo vea). Pero esto me supondría cambiar toda la implementación del proyecto de Windows forms, que, además, es para usarlo localmente, ¿aún así es necesario hacer todo esto?

    Es el 2º proyecto, el de web forms, el que visualiza paginas en el servidor, ¿sería en este donde debo añadir el servicio web, no? y aquí, en realidad, sólo se consultan las tablas incluidas en el archivo de bdd, se modificaría una tabla pero que, de hecho, no utiliza la aplicación de Windows forms.

    Aunque la base de datos tenga que estar en el servidor, ¿Hay otra forma más sencilla de abordar esto, aunque no implemente capa de datos, utilizando el servicio web sólo para el proyecto de web forms, de modo que no me suponga cambiar toda la implementación de la aplicación de Windows forms? Me preocupa muchísimo la falta de tiempo.

    Muchísimas gracias, saludos.


    • Editado Elena_Nueva sábado, 10 de octubre de 2015 8:45 Olvide algo
    sábado, 10 de octubre de 2015 8:42
  • La estructura en capas siempre es recomendable, sobre todo por razones de mantenibilidad y para evitar duplicar código.

    En tu caso, si ya tienes hecha la aplicación Windows Forms con acceso directo a la base de datos y no dispones de tiempo, podrías optar por ubicar la base de datos en una ruta de red a la que pudieran acceder ambas aplicaciones.

    Si optas por esta opción, estableciendo conexiones a la base de datos desde diferentes aplicaciones, te recomendaría que utilizaras un gestor de base de datos orientado a entornos multiusuario en lugar de Access, como SQL Server.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    sábado, 10 de octubre de 2015 9:02
  • Hola, muchísimas gracias, si pudiera utilizar esta opción que me indica, aunque necesitaría que fuera con Access, y así me ahorrara cambiar la aplicación de Windows forms, si que sería muy buena opción, aunque entiendo que no sea tan eficiente como utilizar capas.

    Claro, tendría que seguir utilizando el servicio web para el proyecto de webforms, para visualizar las páginas aspx, e incluirlo en el proyecto de web forms ¿no es así? Por otra parte, ¿cómo ubico la base de datos en una ruta de red y se la indico a los proyectos?. Estoy buscando en internet, pero no se, no encuentro la forma.

    Muchísimas gracias, saludos.

    sábado, 10 de octubre de 2015 9:37
  • Hola, muchísimas gracias, si pudiera utilizar esta opción que me indica, aunque necesitaría que fuera con Access, y así me ahorrara cambiar la aplicación de Windows forms, si que sería muy buena opción, aunque entiendo que no sea tan eficiente como utilizar capas.

    Claro, tendría que seguir utilizando el servicio web para el proyecto de webforms, para visualizar las páginas aspx, e incluirlo en el proyecto de web forms ¿no es así?

    No en el proyecto Web Forms tendrás tus páginas aspx.

    Luego depende de la estrategia que utilices para el acceso a datos. Puedes establecer la conexión a la base de datos desde el código de las páginas aspx, como haces en la aplicación Windows Forms. O crear una capa de servicios web que encapsulen el acceso a datos.

    Yo te recomendaría esta última opción por:

    - El código queda más estructurado y, por consiguiente, es más mantenible

    - Si en un futuro decides modificar tu aplicación Windows Forms para que acceda a la base de datos a través de servicios web ya tendrías parte del trabajo hecho

    Por otra parte, ¿cómo ubico la base de datos en una ruta de red y se la indico a los proyectos?. Estoy buscando en internet, pero no se, no encuentro la forma.


    Deberías compartir una carpeta en el equipo que va a hacer la función de servidor y darle permisos de acceso y escritura tanto a los usuarios que van a utilizar la aplicación Windows Forms, como al usuario del pool de tu sitio web.

    Luego en cada una de las aplicaciones, en la cadena de conexión para establecer la conexión a la base de datos indicas la ruta del archivo Access como \\equipo-servidor\carpeta-compartida\miBaseDeDatos.accdb


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta Elena_Nueva sábado, 10 de octubre de 2015 10:16
    sábado, 10 de octubre de 2015 10:00
  • Hola de nuevo, le agradezco mucho sus explicaciones, me están siendo de mucha ayuda, esto que hago es muy importante para mi, y creo que ya entiendo más o menos como he de desarrollarlo, tema que antes no lograba comprender.

    Gracias de nuevo, Dios se lo pague, saludos.

    sábado, 10 de octubre de 2015 10:16