Visual CSharp .NET - Sessiones donde permanecen creadas

 
Vista:

Sessiones donde permanecen creadas

Publicado por Andres (8 intervenciones) el 16/04/2006 06:20:35
Hola un gran saludo a todos, tenia la siguiente duda y queria saber quien haber quien me puede colaborar, resulta que en paginas aspx utilizo normalmente sessiones donde mantengo la informacion de los dataset desconectados, entonces me di cuenta que normalmente la mayoria de estas sessiones las uso en diferentes paginas de mi aplicacion pero claro cada una es creada en la pagina en su momento, lo que queria hacer es tener una clase de solo sessiones, pero me surge la duda si por ejemplo cuando muchos usuarios esten usando una pagina determinada y esa pagina hace el llamado a una funcion que crea una session, mi pregunta es si el caso de que se produzca un error para algun usuario con la session se van a ver afectados otros ususarios, o eso no tiene nada que ver, porque la verdad no se si la session en ese momento esta alojada en el servidor o en cada uno de los usuarios en el cliente tiene una session con los datos y no hay problema en crear las sessiones de esta forma, para no repetir tanto codigo en las paginas. Gracias

//Esta el la clase que me crea las sessiones

using System;
using System.Web.SessionState;
using DtCo.DSL;
using DtCo.ESL;
using DtCo.Tools;

namespace DtCo.WEB
{
/// <summary>
/// Summary description for SessionActiva.
/// </summary>
public class SessionActiva // <--Nombre de la clase
{

public static PaiDepCiu_DS ObjSessionUbicacion;

#region Constructor

public SessionActiva()
{
//
// TODO: Add constructor logic here
//
}

#endregion //Constructor

#region Ubicacion [pais/Departamento/Ciudad]

/// <summary>
/// Se carga en la variable session {session("ObjSessionUbicacion") el tipo dataset{PaiDepCiu_DS} PAIS, DEPARTAMENTO, CIUDAD}
/// </summary>
public static void cargaDatasetUbicacion(System.Web.UI.Page aspxPage) //aspxPage = this
{

PanelServices ServicesEsl = new PanelServices();

try
{

ObjSessionUbicacion = new PaiDepCiu_DS();

ObjSessionUbicacion.Clear();
ObjSessionUbicacion.Dispose();

{

ObjSessionUbicacion = ServicesEsl.Esl_ObtenerAllUbicacion(); //Retorna el dataset PaiDepCiu_DS
aspxPage.Session.Add("ObjSessionUbicacion", ObjSessionUbicacion);
}
catch(Exception ex)
{
throw new Exception(ex.ToString());
}
finally
{
ServicesEsl = null;
}
}

/// <summary>
/// llena el objeto ya creado con los datos de la session para postback posteriores |
/// <c>miubicacion = (PaiDepCiu_DS)Session["ObjSessionUbicacion"];</c>
/// </summary>
/// <example>miubicacion = (PaiDepCiu_DS)Session["ObjSessionUbicacion"];</example>
public static void ObtenerSessionActiva(System.Web.UI.Page aspxPage)
{
if(aspxPage.Session["ObjSessionUbicacion"] != null)
ObjSessionUbicacion = (PaiDepCiu_DS)aspxPage.Session["ObjSessionUbicacion"];
else
MsgBox.CreateMessageAlert(aspxPage,"Session[ObjSessionUbicacion] El Objeto no existe!","strkey5002"); //aspxPage = this

}

#endregion //end Ubicacion [pais/Departamento/Ciudad]
}
}

//----------------------------
y en la pagina web lo utilizo asi:

llamo esta funcion para que se carge por ejemplo un dropdownlist

private void m_llenarListaPais()
{
SessionActiva.cargaDatasetUbicacion(this); //Creo una session para el objeto
//SessionActiva.ObtenerSessionActiva(this); //obtengo los datos de la session ya creada, pero la uso cuando si es postback

ListPais.Items.Clear();
ListPais.DataSource = SessionActiva.ObjSessionUbicacion;
//ListPais.DataMember = ObjSessionInstitucionDS.INSTITUCION.ToString();
ListPais.DataValueField = SessionActiva.ObjSessionUbicacion.PAIS.Columns["PAI_ID"].ToString();
ListPais.DataTextField = SessionActiva.ObjSessionUbicacion.PAIS.Columns["PAI_NOMBRE"].ToString();
ListPais.DataBind();
ListPais.Items.Insert(0,new ListItem("Seleccione","-1"));
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Sessiones donde permanecen creadas

Publicado por Andres (8 intervenciones) el 16/04/2006 07:02:36
Otra duda que me acabo de surgir que pasa cuando creo las funciones static que diferencia hay de cuando la utilizo a traves de una referencia en la pagina,

Lo que entiendo hasta ahora es que static no tengo necesidad de crear una instancia de ella sino que uso la funcion directamente.

Ejm.

declarada asi
public static void cargaDatasetUbicacion(System.Web.UI.Page aspxPage)
{
//codigo........
}

Y la utilizo asi:

SessionActiva.cargaDatasetUbicacion(this);
//-------------------------------------------------------------------------------------------------------
Y cuando no es static me toca crear una instancia del objeto clase para poder acceder a las funciones de ella
Ejm
declarada asi:
public void cargaDatasetUbicacion(System.Web.UI.Page aspxPage)
{
//codigo........
}

Y la uso asi:

SessionActiva ObjSession = new SessionActiva();
ObjSession.cargaDatasetUbicacion(this);

Es asi o hay otra diferencias mas de forma, como por ejemplo que al ser static el objeto solo esta creado una sola vez y todos acceden a esa funcion y si hay algun error con ella los demas usuarios que la esten usando o la llamen podrian obtener un error, disculpen estas preguntas pero es que aveces me enredo con esto de los objetos.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sessiones donde permanecen creadas

Publicado por Andres (8 intervenciones) el 19/04/2006 00:36:23
http://www.subgurim.net/Articulos/csharp-articulo44.aspx
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sessiones donde permanecen creadas

Publicado por isa (14 intervenciones) el 29/01/2007 16:30:41
A ver resumiendo, q es más snecillo de lo que parece, las variables de Session son varialbes que se almacenan y se alojan en una zona de memoria en el serividor (muy importante). Se puede guardar cualquier tipo de objeto, si bien, cuando se intenta recuperar su valor, siempre hay que hacer un casting al tipo de objeto guardado (las variables de session siempre guardan un tipo Object). Esas variables de Session permanecen en memoria mientras se está dentro de la misma Session(como su propio nombre indica). En el momento en que reinicias el explorador, esas zonas de memoria se limpian. Pero bien, en una aplicación de gran magnitud, es recomendable, limpiar por código esas variables, poniendolas a nulas, ya que si se guarda gran cantidad de información, esto puede ralentizar el sistema.

Espero haberte ayudado.

ISABEL
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sessiones donde permanecen creadas

Publicado por Andres (8 intervenciones) el 29/01/2007 19:42:05
Gracias Isabel por tus comentarios, si la verdad mi duda estaba en donde se alojaba los datos de la session si en el cliente o en el servidor y como tu me confirmas esta en el servidor, me preocupaba tener en el cliente un dataset con muchos miles de registros y que la maquina fuera lenta y no los pudiera soportar, si y tienes razon hay que destruir esas sessiones para no relentizar el servidor. Por lo cual cada usuario que se conecte tendra una session independiente y con un grupo de datos diferentes para cada uno y no importa si algun usuario tuviera un inconveniente porque los datos de las sessiones son independientes para cada uno.

Ahora me queda por aprender como manejar un mismo objeto de datos puede ser la informacion contenida en un dataset. Es decir mantener en el servidor un objeto de datos que sea accesado por todos los usuarios que se conecten a el y no haya la necesidad de crear una session de datos para cada uno, si no un solo objeto accesible a todos y que a todos les muestre los ultimos cambios realizados en el mismo objeto.

Gracias por tu respuesta

SAludos

Andres
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sessiones donde permanecen creadas

Publicado por isa (14 intervenciones) el 30/01/2007 10:16:45
Pues para hacer eso, prueba con un variable estática, a la cual no necesitas acceder a través de la instancia de un objeto. Creo que eso te podría servir. se aloja en servidor, y es única, yo creo que con eso te podria servir.

Dime si te sirve.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar