Angel, y a todos:
    Muchas gracias por sus respuestas
    Me siervieron muchisimo
    Logre armar algo como mencionaban, al llamar a un thread le cargo el
USSes y el USApp en los items del thread
    Luego en el metodo GetSession, controlo si existe el httpcurrent, si no
es asi, devuelvo el del thread
    Hasta el momento esta funcionado bien, ahora voy a chequear si todo el
resto sigue funcionando igual
    Gracias Totales !!!
 
Diego
    

  _____  

De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Angel
"Java" Lopez
Enviado el: Lunes, 20 de Agosto de 2007 15:32
Para: [email protected]
Asunto: [puntonet] HttplContext (Session y Aplication)


Hola gente!

Diego, si lanzas un nuevo thread, estando en una aplicacion web, hmmm....
por lo que vi, tenes la informacion en un solo objeto
HttpContext.Current.Session("USSes"), .... bien, al lanzar un nuevo thread,
seguramente invocando algun metodo de un objeto intermedio, le sembraria a
ese objeto el HttpContext.Current.Session("USSes") de tu thread originario,
para que lo implante en el Call Context de Remoting. Tus helpers, deberian
preguntar por el HttpContext.Current y si es Nothing, preguntar por el Call
Context de Remoting
 
No se si me explico... A ver, sea la clase
 
Class ObjetoLanzadorDeThread
    Private mAGuardar as Object
 
    Public Sub New(aguardar as Object)
        mAGuardar = aguardar
    End Sub
 
    Public Sub Run() ' lanzado desde un nuevo thread
        CallContext.Save("USSes", mAGuardar) ' no recuerdo la sintaxis de
CallContext
        ' hacer lo que tengas que hacer en el thread.... lanzar otro objeto,
metodo, lo que sea
    end sub
End Class
 
Se lanzaria como
 
    Dim launcher as new ObjetoLanzadorDeThread(GetSes)
    launcher.Run
 
Se podria pasar a launcher dos objetos, uno de GetSes, y otro de GetApp.
 
Otra alternativa es no pasarle nada y que se informe por si mismo, en el
constructor, algo como:
 
Class ObjetoLanzadorDeThread
    Private mAGuardar as Object
 
    Public Sub New(aguardar as Object)
        mAGuardar = GetSes ' tu helper de lo que querias guardar en Session
    End Sub
 
    Public Sub Run() ' lanzado desde un nuevo thread
        CallContext.Save("USSes", mAGuardar) ' no recuerdo la sintaxis de
CallContext
        ' hacer lo que tengas que hacer en el thread.... lanzar otro objeto,
metodo, lo que sea
    end sub
End Class
 
Algo mas refinado seria que en vez de Helpers, tuvieras propiedades shared
en una clase
 
Public Class GranDiego
    Public Shared Property ApplicationData as Object
        Get
            ' si esta HttpContext.Current, la sacamos de
HtppContext.Current.Application("USApp"), sino de CallContext de remoting
        end Get
        Set(value as Obejct)
 
            ' si esta HttpContext.Current, lo guardamos ahi, sino lo
guardamos en CallContext
        End Set
    end Property
 
    Public Shared Property SessionData as Object
        ' lo mismo, pero de HttpContext.Current.Session, o de otra variable
de CallContext
    End Property
End Class
 
Tonche, el objeto lanzador haria
 
  
Class ObjetoLanzadorDeThread
    Private mApplicationData as Object
    Private mSessionData as Object
 
    Public Sub New(aguardar as Object)
        mApplicationData = GranDiego.ApplicationData
        mSessionData = GranDiego.SessionData
    End Sub
 
    Public Sub Run
        ' Notablemente, esto deberia andar en un nuevo thread
        GranDiego.ApplicationData = mApplicationData
        GranDiego.SessionData = mSessionData
    End Sub
 
Es decir, el objeto lanzador se crea en el thread T1, eso hace que su
constructor tome todo el contexto actual de session y application, sea donde
sea que este localizado (la localizacion la resuelven las propiedades
shared). Luego como el Run se ejecuta en otro thread, reimplantara esos
datos, en lo que le corresponda a ese nuevo thread T2.
 
Espero que se haya entendido algo...
 
Nos leemos!

Angel "Java" Lopez
http://www.ajlopez.com/
 
 

----- Original Message ----- 
From: Diego  <mailto:[EMAIL PROTECTED]> Baselica 
To: [email protected] 
Sent: Thursday, August 16, 2007 6:12 PM
Subject: [puntonet] HttplContext (Session y Aplication)


damian, esto hice algo similar a lo que vos mencionas
Pero tengo un problema, ya qiue seguramente encare algo mal de entrada
 
Cuando Incia mi aplicacion tengo un Objeto USApplication que contiene
informacion de la empresa que inicio y otros datos generales, que lo pongo
en HttpContext.Current.Aplication("USApp")
Cuando un usuario inicia sesion tengo otro objeto USSession que tiene el
IDUsuario, fecha inicio, procesos a lso que puede acceder, etc, que lo pongo
en HttpContext.Current.Session("USSes")
 
Luego tengo un Helper que
GetApp  --> que devuelve el valor de HttpContext.Current.Aplication("USApp")
GetSes  --> que devuelve el valor de HttpContext.Current.Session("USSes")
 
En capas de servicios/mapers por ejemplo tengo un proceso que consulta datos
y debe obtener siempre los del usuario que se logueo, entonces armo un
filtro con el usuario de la session
Ej: "IDUser = " & GetSes.IDUser   
 
Hasta ahi venia todo bien
Cuando se invoca desde un WebService, y las llamadas en capas subsiguientes,
Servicios, Entidades, Mapper, tengo acceso al HttpContext.Current
 
Resulta que ahora tuve que hacer unos procesos en el logion de usuario, Ej,
ejecutar tareas programadas del usuario al inicio de sesion, que generan
algun reporte y lo envian por mail
Pero esto no lo puedo hace rsincronico en el login, porque sino el ingreso
del usuario demora mucho.
Entonces se me ocurrio lanzar la ejecucion de esas tareas en un Thread
distinto
Pero me encontre que el HttpContext.Current no existe mas, Nothing, y por lo
tanto mis metodos GetApp y GetSes dan error y no puedo utiliza los valores
 
Creo que el tema es que no deberia almacenar mis objetos en el
HttpContext.Current, 
Con el obketo USAplication, lo veo factible de ponerlo como una variable
Shared o algo similar, pero con las sesiones, necesito que de alguna forma
poder devolver la sesion  de usuario y no lo veo, 
Pensaba un diccionario shared, pero con que key lo acceso, ya que tampoco
tengo el HttpContext.Current.SessionID
 
Alguna idea???
 
 
Ing. Diego M. Basélica
e-mail: [EMAIL PROTECTED]
 
UpSoft Sistemas Informáticos
Rafael Nuñez 3498 (X5009CFO) Córdoba, Argentina
Tel/Fax: 0351-4814812 (rot.)
www.upsoft.com.ar 
 
  
 
 

  _____  

De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Damián
Herrera
Enviado el: Jueves, 16 de Agosto de 2007 15:33
Para: [email protected]
Asunto: [puntonet] HttplContext (Session y Aplication)


Hola Diego,
 
Podes crearte una especie de wrapper tuyo que encapsule el uso de
HttpContext y de acuerdo al contexto en el que corres (Web o Win) utilizas
el contexto adecuado.
 
Yo por ejemplo lo utilizo de esta manera:
 
Public Shared Sub [Add](ByVal pKey As String, ByVal pValue As Object)
 Mutex.WaitOne()
 If HttpContext.Current Is Nothing Then
  CallContext.FreeNamedDataSlot(pKey)
  CallContext.SetData(pKey, pValue)
 Else
  HttpContext.Current.Items.Remove(pKey)
  HttpContext.Current.Items.Add(pKey, pValue)
 End If
 Mutex.ReleaseMutex()
End Sub

Saludos,
Damián Herrera



  _____  

From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Diego
Baselica
Sent: Thursday, August 16, 2007 1:44 PM
To: [email protected]
Subject: [puntonet] HttplContext (Session y Aplication)


Hola estoy buscando una solucion para reemplazar el HttpContext.Current, ya
que alli estao almacenando mis objetos de sesion de usuario, pero cuando
utilizo otros hilos de ejecucion, pierdo dicho contexto y mi proceso falla
Buscando encontre una supuesta solucion en el sitio de AJlopez Create
<http://www.ajlopez.net/ArticuloVe.php?Id=634> your own HttpContext class ,
pero el link no funciona, asi que queria saber si alguien por casualidad
tiene elgo de este material o referirme a otro lugar donde buscarlo.
O alguna otra solucion para este tipo de problemas
 
Muchas gracias
 
 <mailto:[EMAIL PROTECTED]> 

Ing. Diego M. Basélica
e-mail: [EMAIL PROTECTED]
 
UpSoft Sistemas Informáticos
Rafael Nuñez 3498 (X5009CFO) Córdoba, Argentina
Tel/Fax: 0351-4814812 (rot.)
www.upsoft.com.ar 
 



__________ Información de NOD32 2466 (20070816) __________

Este mensaje ha sido analizado con NOD32 Antivirus System
http://www.nod32.com


Responder a