Generic Handler (.ashx) ve Session erişimi

Tarih 14 Ocak 2010 Perşembe, 04:00 | Etiket(ler) Asp.Net

Pek çoğumuz Generic Handler'lar (.ashx) dosyaları oluşturur xml, css, javascript, text vs. gibi dosya ve verileri duruma göre bu dosyalar üzerinden servis ederiz. Sitemizin kullanıcı bazlı davranışlarında veya başka durumlarda generic handler'lar vazgeçilmez kullanım şekillerinden biridir. Ben genelde ajax ile xml verisi okuyacağım yerlerde generic handler kullanmayı tercih ederim. SiteMap ve Rss servislerini de bu şekilde sunmayı tercih ederim. Kişiye özel veri okunmak ve manipule edilmek istediğinde session'lar aracılığıyla bu verileri transfer etmeyi ve değiştirmeyi tercih ettiğimiz durumlarda generic handler'lar ilk yaratılışlarında bu duruma müsade etmezler. Generic handler içinden session okumam veya yazmam gereken bir projede biraz araştırma ile sorunu şu şekilde çözdüm. Buradan paylaşayım ve bu sorunla karşılaşanların derdine derman olsun istedim.

Generic handler ilk oluşturulduğunda aşağıdaki gibi bir görüntüyle karşılaşırız
Imports System
Imports System.Web

Public Class Handler : Implements IHttpHandler

    Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        context.Response.ContentType = "text/plain"
        context.Response.Write("Hello World")
    End Sub
 
    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property
End Class
İçerisinden session okumak istediğimizde yapmamız gereken sadece handler'ımıza session'ı sadece okumak için IReadOnlySessionState i, session'ı hem okumak hem de yazmak için ise IrequiresSessionState interface lerini eklemektir. Sonuç olarak session okumak ve yazmak için aşağıdaki gibi bir handler işinizi görecektir.
Imports System
Imports System.Web

Public Class Handler : Implements IHttpHandler, IRequiresSessionState

    Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        context.Response.ContentType = "text/plain"
        context.Response.Write("Adı : " & context.Session("ADI").ToString & "")
        context.Response.Write(vbCrLf)
        context.Response.Write("Soyadı : " & context.Session("SOYADI").ToString & "")
        context.Response.Write(vbCrLf)
        context.Response.Write("User IDsi : " & context.Session("UID").ToString & "")
        context.Response.Write(vbCrLf)
        context.Response.Write("Tarih : " & context.Session("TARIH").ToString & "")
        context.Session("ADI") = "Değiştir"
        context.Session("SOYADI") = "Bakalım"
        context.Session("UID") = "13"
        context.Session("TARIH") = DateTime.Now.ToString
        context.Response.Write(vbCrLf)
        context.Response.Write("Sayfayı yenilediğinizde session değerleri değişecek")
    End Sub
 
    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property
End Class
Projenin çalışan halini indirmek için tıklayınız



Yorumlar
Bu yazıya henüz yorum yapılmamış. İlk yorumu siz yapmak isterseniz aşağıdaki formu doldurabilirsiniz.
Yorum yazın

Capthca Karakterleri kutuya giriniz
Kodu değiştir...


Geri Dön   |   Ana Sayfaya Dön