Archivos planos locales en desarrollos ASP tipo carrito de compras

Soy Analista de Sistemas. En la empresa tenemos un desarrollo personalizado para que los vendedores, después de logearce, puedan seleccionar los items y agregarlos a un carrito de compra. El desarrollo está generando un inconveniente y es que cuando el listado del carrito de compras tiene mas y mas items se va poniendo mas lento pues este listado se está guardando en una tabla temporal en la BD (SQL 2000) y si varios usuarios lo hacen al mimo tiempo obviamente la respuesta va disminuyendo. Una de las sugerencias hechas al desarrollador es que en vez de trabajar con la BD del servidor y sus recursos se cree en cada equipo que acceda a la pagina un archivo plano temporal con la información de la consulta para que se utilice el recurso local de cada maquina que acceda a la página; osea, cuándo se acceda y se vaya agregando un item al carrito de compras quede almacenada la información localmente. No sé si esto es tecnológicamente posible y si es así que se debe de tener en cuenta para llevarlo a cabo.
2

2 Respuestas

54.830 pts. Desarrollador en Todoexpertos.com y Terminis.com (uno...
Las páginas ASP .NET se ejecutan en el servidor por lo que no es posible guardar un fichero en el pc de cada usuario (esto lo podrías hacer si en lugar de una página ASP fuera una aplicación local de tipo WinForms).
Otra solución que se me ocurre es que, en lugar de guardar en base de datos cada vez que se inserta algo al carrito, guardarlo en Sesión y, cuando la compra se vaya a realizar que ya se pueda insertar en base de datos, pasar de sesión a base de datos.
Guardar variables de Sesión en ASP :NET es muy sencillo, tan solo tienes que escribir:
Session["nombre de la variable de sesión"] = objeto que quieres guardar.
Supongamos que tienes una clase "Producto" con los datos del producto y una "List<Producto>" que representa al carrito.
Lo ideal sería guardar en dicha List el producto y luego, cuando sea necesario pasarla a BD, recorrer producto a producto e ir insertando.
La lista la podrías declarar como una propiedad estática en alguna clase de la siguiente forma:
public static List<Producto> Carrito
{
get
{
  if (HttpContext.Current.Session["carrito"]== null)
  {
      HttpContext.Current.Session["carrito"] = new List<Producto>();
  }
   return HttpContext.Current.Session["carrito"] as List<Producto>;
}
}
así puedes hacer directamente:
Carrito.Add(new Producto());
Para añadir un producto al carrito de sesión.
En cualquier caso no debería de ser un problema el añadir items varios usuarios al mismo tiempo contra una BD común. Si no funciona con la suficiente velocidad debe de ser o bien un problema del código o bien de la base de datos.
Gracias vfportero:
Perdona la ignorancia pero me puedes explicar que es Sesión, a que te refeieres con guardarlo en Sesión??
La "Sesión" es toda aquella información que se guarda sobre el estado de una visita única del lado del servidor.
En sesión se guardan los datos del usuario que ha hecho login y todas aquellas variables que, como el carrito, quieres que se mantengan en memoria mientras el usuario esté visitando la página.
Usualmente, la Sesión finaliza cuando el visitante deja la página por lo que su carrito se borraría.
Esto se puede ampliar dando más tiempo a la sesión desde el Web. Config y en la configuración de la aplicación en el IIS.
591.125 pts. Licenciado en Informática
Tecnológicamente si es posible, pero tampoco 100%, porque si es una aplicación online, no se va a poder crear una BD en local, al menos en SQL Server, claro.
Lo que podría utilizar es variables de javascript o variables de sesion de ASP para no sobrecargar la BD.
De todas formas, SQl Server, debe soportar al menos 10 usuarios concurrentes sin problemas, si las tablas están bien indizadas y las consultas no son excesivamente complejas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas