--
Saludos,
Jhonny Vargas P.
Santiago de Chile
... el viejo guatón Vargas...
"Marcia" <Mar...@discussions.microsoft.com> escribió en el mensaje de
noticias:19108614-601D-49F1...@microsoft.com...
(me sumo al post)... Agregando a lo que comenta Jhonny
Tengo preguntas (como Jhonny!)
- Estas utilizando Membership Provider? Si es así no es necesario
utilizar la verificación manual
Veo que utilizas usuarioperfil = Session("PerfilUsuario") y
encima es una serializacion de un objeto tipo Usuario() (me pregunto
que contendra este objeto?)
- Estas en el servidor de produccion? o estas desarrollando en tu
maquina?
Hay un EFECTO que es PERDER LAS VARIABLES DE SESSION cuando se
encuentra en modo INPROC
- Se pierden todas la variables o solo algunas?
- Siempre pasa lo mismo en el mismo lugar? (la misma pagina)
Bueno te envio unos enlaces para que mires, por ejemplo:
- ¿Por qué se reinicia mi aplicación ASP.NET?
http://support.microsoft.com/?scid=kb;es;871042
- Las variables de sesión (modo inProc) se pierden
intermitentemente.
- Se pierden las variables de estado de aplicación.
- Se pierden los datos de caché.
- Parece que el evento Application Start y el evento Application
End se inician inesperadamente
Con lo que respecta al primer punto, cuando las vbles de session se
almacenan en modo INPROC (que es la configuracion por defecto) se
guardan en el mismo proceso que esta corriendo tu applicacion web, y
si falta memoria en el servidor todo lo que esta inProc se puede
eliminar para dejar un poco de "lugar"...
Te recomendaria que coloques tus sessiones pro ejemplo en un servidor
de session o incluso dentro de un sqlserver, para que no tengas
problemas cuando estes modificando archivos.
Pero para empezar podrias guarda en el mismo servidor o sea deberas
configurar esa maquina com oservidor en modo StateServer el
sessionState (tambien esta en los enlaces mas abajo)
-----------------------------------------------
POST ANTERIOR
-----------------------------------------------
Si puede ser que las variables de session las pierdas... porque si
falta memoria en el servidor todo lo que esta inProc se puede eliminar
para dejar un poco de "lugar"... basicamente estan en el mismo PROCESO
y este proceso tiene la particularidad que se RECICLA.
Te recomendaria que coloques tus sesiones por ejemplo en un servidor
de session o incluso dentro de un sqlserver, para que no tenga
problemas cuando estes modificando archivos, o para que no se pierdan
las variables
Para probar coloca en el modo StateServer en el mismo servidor y alli
no se "perderan" de repente sino cuando deben... mas abajo coloco unos
enlaces de este procedimiento
Aqui tambien unas cosillas mas de un post anterior de la misma
tematica.
Bueno la session donde la guardas???
------------------------------------------------------------------------
ASP.NET admite tres modos de estado de sesión: (vaa 4 con Custom)
- InProc
- StateServer:
- SqlServer:
- Custom
Aqui estan:
- InProc: el modo en proceso almacena valores en la memoria del
proceso de trabajo de ASP.NET. Este modo ofrece el acceso más rápido a
estos valores. Sin embargo, cuando el proceso de trabajo de ASP.NET se
recicla se pierden los datos de estado.
- StateServer: Como alternativa, el modo StateServer utiliza un
servicio independiente de Microsoft Windows para almacenar variables
de sesión. Como este servicio es independiente de Microsoft Internet
Information Server (IIS), puede ejecutarse en un servidor diferente.
Puede utilizar este modo en una solución de equilibrio de carga, ya
que varios servidores Web pueden compartir variables de sesión. Aunque
las variables de sesión no se pierden si reinicia IIS, el rendimiento
se ve afectado cuando atraviesa los límites de proceso.
- SqlServer: si le preocupa la persistencia de la información de
sesión, puede utilizar el modo SqlServer para utilizar Microsoft SQL
Server y asegurar así el máximo nivel de confiabilidad. El modo
SqlServer es similar al modo fuera de proceso, excepto en que los
datos de sesión se mantienen en SQL Server. El modo SqlServer también
le permite utilizar un almacén de estados ubicado fuera del proceso de
IIS y que puede residir en el equipo local o en un servidor remoto.
- Existe un modo Custom, donde debes indicarle donde se guardaran
las sessiones (nunca lo probe por eso no te puedo comentar muy bien)
Donde se configura: en el web.config (como toda configuracion) je!
Y cuando se reinicia?
----------------------
Dice que se reinicia cuando:
- si se recicla el AppDomain,
- o el proceso Aspnet wp.exe (o el proceso W3wp.exe)
Cuando?
- Varios atributos (por ejemplo el atributo memoryLimit)
tienen configuraciones particulares en la sección <processModel> del
archivo de configuración.
(aqui vale la pena aclarar que este cambio no surge efecto
directamente como lo demas atributos del webconfig sino cuando se
reinicia el proceso de trabajo)
Se lo puede cambiar tambien desde interfaz grafico desde el grupo de
aplicacciones desde la consola del IIS. pero creo que esto es para
todas las webs del grupo de app pero no se cual tiene mas prioridad
creo yo que el webconfig como todo.
memoryLimit: Especifica, como porcentaje de la memoria total del
sistema, el espacio de memoria máximo que el proceso de trabajo puede
consumir antes de que ASP.NET inicie un nuevo proceso y reasigne las
solicitudes pendientes. El valor predeterminado es 60.
- Se modificaron el Global.asax o el archivo Web.config.
- Se modificó el directorio Bin de la aplicación Web.
- La detección de virus de software tocó alguna información
adicional en archivos de configuracion .config.
El modo de sesión InProc indica que se almacena estado de la sesión
localmente.
Esto significa que con sesión InProc, se almacena realmente el modo de
estado en objetos de vida en el AppDomain de la aplicación Web. Se
debe esto a cuando se pierde al estado de sesión Aspnet wp.exe (o
W3wp.exe para aplicaciones que se ejecutan en Servicios de Internet
Information Server [IIS 6,0]) o se reinicia el AppDomain.
Todo eso esta en este KB
http://support.microsoft.com/?scid=kb;es;324772
INFO: Introducción a la administración de estados de ASP.NET
http://support.microsoft.com/kb/307598/es
Configuración de la agrupación de aplicaciones de reciclaje
--------------------------------------------------------------------------------------------------------------
Reciclar la configuración del grupo de aplicaciones:
La configuración de la agrupación de aplicaciones de reciclaje
permiten controlar el modo de recuperación de los recursos del
sistema
http://msdn2.microsoft.com/es-es/library/1dtw20e3.aspx
Process Model - Propiedades
http://msdn2.microsoft.com/es-es/library/yk0c93w4.aspx
ProcessModelSection (Clase)
La clase ProcessModelSection controla los distintos aspectos del
proceso de trabajo de ASP.NET, incluidos el período de duración, el
número de instancias creadas a la vez, bajo qué identidad de
seguridad se ejecuta y el tamaño del grupo de subprocesos de CLR que
se ocupa de las solicitudes.
http://msdn2.microsoft.com/es-es/library/system.web.configuration.processmodelsection(VS.80).aspx
Enlaces:
-------------------
Modos de estado de sesión
http://msdn2.microsoft.com/es-es/library/ms178586.aspx
Elemento sessionState (Esquema de configuración de ASP.NET)
http://msdn2.microsoft.com/es-es/library/h6bb9cz9.aspx
¿Por qué se reinicia mi aplicación ASP.NET?
http://support.microsoft.com/?scid=kb;es;871042
PRB: Datos de sesión se pierden cuando utiliza modo InProc de ASP.NET
de estado de sesión
http://support.microsoft.com/kb/324772/es
PRB: Las variables de sesión se pierden intermitentemente en
aplicaciones ASP.NET
http://support.microsoft.com/kb/316148/es
CÓMO PARA: Configura SQL Server a Store ASP.NET Session State
http://support.microsoft.com/kb/317604/
otro post
http://groups.google.com.ar/group/microsoft.public.es.dotnet.aspnet/msg/d0e5ed1238f28084
Espero que te sirva de ayuda o guia
______________________
Jose A. Fernandez
blog: http://geeks.ms/blogs/fernandezja
On 17 jun, 18:28, "Jhonny Vargas P." <c_h_a_n_g_e_sREM...@hotmail.com>
wrote:
> Nos puedes mandar el extracto de código donde te conectas a la base de
> datos?, ya que existe un error con el framework 2.0 y la cantidad de
> conexiones usadas abiertas. Lo que provoca justamente lo que comentas...
>
> --
> Saludos,
> Jhonny Vargas P.
> Santiago de Chile
>
> ... el viejo guatón Vargas...
>
> "Marcia" <Mar...@discussions.microsoft.com> escribió en el mensaje de
> noticias:19108614-601D-49F1-8269-886A12708...@microsoft.com...
Con respecto a las preguntas de Jose. No utilizo el Membership Provider y el
efecto me ocurre en el servidor de producción no en forma local. En este
objeto que genero tengo todo lo que se refiere al usuario: sus datos, perfil
y permisos de acceso a distintas opciones de la aplicación. No sé si será
esto pero en el web.config tengo lo siguiente:
<sessionState mode="InProc" timeout="15">
</sessionState>
Esto lo copié tal cual de un foro para que luego de un período de
inactividad por parte del usuario cierre la sesión del mismo. Igualmente yo
hice una prueba sacando ese tag para ver si seguía teniendo el mismo efecto,
pero la aplicación seguía con ese extraño comportamiento. No es únicamente en
una página, sino me ocurre en forma aleatoria en distintas páginas.
Aprovecho a preguntar también. Yo utilizo el objeto Session para almacenar
todo lo correspondiente al usuario y lo hago de esta forma
"Session("parametro") = miValor" donde puede ser un objeto u otro tipo de
datos. Según lo que entiendo utiliza el método INPROC por default, ¿cómo
puedo cambiar esa forma de almacenamiento para evitar la pérdida de las
mismas?
Les agradezco nuevamente la ayuda...
Saludos
"Jose A. Fernandez" wrote:
> > > eso y para probar, eliminé la opción del timeout en el web.config.... pero
Pero que usas para "ejecutar una transacción"?
Si estás usando DataAdapter asegúrate de finalizar con esto:
If (Not adapter Is Nothing) Then adapter.Dispose()
También hacer un conexion.Close()
"Posiblemente" como te comentaba inicialmente, existe un problema con el
framework 2.0 (no tengo el link a mano) que deja "tomado" el pool del IIS
las conexiones y no son capaz de eliminarse, lo que provoca que se limpie y
pierdas todas las variables de sesión en tu aplicación...
--
Saludos,
Jhonny Vargas P.
Santiago de Chile
... el viejo guatón Vargas...
"Marcia" <Mar...@discussions.microsoft.com> escribió en el mensaje de
noticias:34225D65-CDC2-448F...@microsoft.com...
La segunda función es la siguiente:
Public Function EjecutarTransaccion(ByVal consulta As String) As Boolean
On Error GoTo error_en_transaccion
Call Conectar()
Call ComenzarTransaccion()
comando.CommandText = consulta
comando.ExecuteNonQuery()
Call ConfirmarTransaccion()
EjecutarTransaccion = True
Call Desconectar()
Exit Function
error_en_transaccion:
Call CancelarTransaccion()
EjecutarTransaccion = False
Call Desconectar()
End Function
Donde los procedimientos que llaman cada una de ellas son:
Public Sub Desconectar()
conexion.Close()
conexion = Nothing
End Sub
Public Sub ComenzarTransaccion()
comando = New SqlCommand()
comando.Connection = conexion
transaccion = conexion.BeginTransaction()
comando.Transaction = transaccion
End Sub
Public Sub ConfirmarTransaccion()
comando = Nothing
transaccion.Commit()
transaccion = Nothing
End Sub
Public Sub CancelarTransaccion()
comando = Nothing
transaccion.Rollback()
transaccion = Nothing
End Sub
Quizás hay algún error en estos métodos que no vi. Es posible...
Gracias!!!
"Jhonny Vargas P." wrote:
> Marcia,
>
> Pero que usas para "ejecutar una transacción"?
>
> Si estás usando DataAdapter asegúrate de finalizar con esto:
>
> If (Not adapter Is Nothing) Then adapter.Dispose()
>
> También hacer un conexion.Close()
>
> "Posiblemente" como te comentaba inicialmente, existe un problema con el
> framework 2.0 (no tengo el link a mano) que deja "tomado" el pool del IIS
> las conexiones y no son capaz de eliminarse, lo que provoca que se limpie y
> pierdas todas las variables de sesión en tu aplicación...
>
>
> --
> Saludos,
> Jhonny Vargas P.
> Santiago de Chile
>
> .... el viejo guatón Vargas...