Hola a todos y gracias por su ayuda de antemano, les comento:
He realizado una aplicación winform por capas (cliente-servidor con
unos servicios web) y tengo un pequeño problemilla que os intento
explicar resumidamente.
La funcionalidad de la aplicación consiste en que el cliente genera un
evento que manda unos datos al servidor y éste los almacena en una
base de datos SQL Server (mediante un procedimiento almacenado). Hasta
aquí todo bastante normalito, pero cuando el cliente no tiene conexión
con el servidor guarda la información en una base de datos local (para
no perder funcionalidad).
El problema radica en que cuando la red falla (se comprueba a través
del servicio web) los datos se guardan en la base de datos local, pero
si los datos ya han pasado por el servicio web también se guardan en
la base de datos del servidor, es decir se almacenan los datos en las
dos bases de datos. Esto se debe a que la llamada al servicio web
espera un tiempo determinado (timeout) al resultado para lanzar una
excepción y pasar a guardar los datos en la base de datos local, pero
cuando esto se produce la aplicación suele seguir trabajando en el
servidor hasta guardar los datos.
Me imagino que alguien ya habrá sufrido este problema, lo que no sé es
cual es la solución más "correcta" por decirlo de alguna manera. Las
opciones que se me han ocurrido son las siguientes, aunque estoy casi
seguro que no son las únicas:
- Aumentar el timeout del servicio web es una opción que ya he
utilizado, pero no puedo aumentarlo de una manera indiscriminada por
el consiguiente cabreo del cliente
- Realizar un trigger que cuando inserte los datos en la base de datos
del servidor, compruebe si también se insertaron en la base de datos
local y si es así los elimine. Es la opción que más me convence.
- Otra opción, que no me convence demasiado y no estoy muy seguro de
como utilizarla, es la de usar llamadas asíncronas a los servicios
web. Aunque creo que no encaja bien con la filosofía de la aplicación.
- ...
Espero que mi explicación haya sido clara y me puedan ayudar.
Un saludo
Leer las respuestas