2009-08-06 9 views
7

Objetivo: Tengo una miniatura como una matriz de bytes en la memoria. Una vez que un usuario carga su imagen, quiero mostrarla en un httphandler antes de escribirla en la base de datos. He usado este código para leerlo con éxito y mostrarlo desde una base de datos. Pero ahora quiero mostrarlo de la sesión:¿Cómo puedo usar la variable de sesión en un HttpHandler

Public Sub ProcessRequest(ByVal context As HttpContext) _ 
    Implements IHttpHandler.ProcessRequest 

    Dim oPhotoMgt As New PhotoMgt 
    Dim intPhotoID As Int32 = context.Request.QueryString("id") 
    Dim oPhoto As New Photo 
    oPhoto = oPhotoMgt.GetPhotoByID(intPhotoID) 

    context.Response.ContentType = "image/jpeg" 
    context.Response.BinaryWrite(oPhoto.Bytes.ToArray()) 
End Sub 

Respuesta

15

Usted debe marcar su clase con el IRequiresSessionState interfaz (System.Web.SessionState espacio de nombres). No tiene métodos o propiedades, por lo que no debería tener que cambiar nada más sobre su código.

La firma sería:

Imports System.Web 
Imports System.Web.SessionState 

Public Class MyHandler 
    Implements IHttpHandler, IRequiresSessionState 

    Public Sub ProcessRequest(ByVal context As HttpContext) _ 
     Implements IHttpHandler.ProcessRequest 

     context.Session("foo") = "bar" 
    End Sub 
End Class 
+0

Gracias Thorarin. Implemento IRequiresSessionState pero todavía no puedo ver la variable Session. Me aparece "Nombre". La "sesión" no está declarada. –

+0

Actualicé el ejemplo para demostrar el uso de la sesión. +1 a Jack :) – Thorarin

1

Thorarin era correcta. Tuve que implementar IRequiresSessionState. Lo que no me di cuenta fue que luego tuve que hacer referencia a la variable como

context.Session("oUser") 

en lugar de

Session("oUser") 
Cuestiones relacionadas