Etiketler
ASP.NET | Session Yönetimi | State Server
OTURUM (SESSION) VERİLERİNİ STATE SERVER A TAŞIMAK
Bilindiği üzere Asp.net uygulamalarında
- Bin klasöründeki herhangi bir dosyayı
- Web.Config içinde herhangi bir ayarı
değiştirseniz uygulama tekrar başlar (Application Restart) ve “tüm oturum ( session ) bilgileriniz” kaybolur.
Bu session problemini çözmek için session verilerinizi “InProc” tutmak yerine “State Server” yada “Sql Server” da tutmayı tercih etmelisiniz. Çünkü State Server yada Sql Server da oturum bilgilerinizi tuttuğunuzda, bu veriler uygulamanızın yönetimi haricinde bir bölgeye yazılacaktır. Dolayısıyla uygulamanızın çalışma durumunundan etkilenmeyecektir.
Oturum (session) verilerinizi State Server da tutmak için yapmanız gereken ayarlar :
1. Web.config dosyası içersinde etiketleri arasına aşağıdaki belirtilen parametreyi eklemeniz gerekmektedir.
“42424: State Server için varsayılan port numarasıdır. ”
2. stateConnectionString de belirttiğiniz server da (kendi bilgisayarınız da olabilir. (local) ) , ASP.NET STATE SERVER Hizmetini (Service) başlatmanız gerekmektedir.
ASP.NET STATE SERVER Hizmetini başlatmak için :
Denetim Masası –> Yönetimsel Araçlar –> Hizmetler
e giriniz ve ASP.NET STATE SERVER hizmetini bulunuz. Çift tıklayıp özelliklerine girdiğinizde, “Başalangıç Türü” nü “OTOMATİK” olarak değiştirip, “BAŞLAT” deyip, “UYGULA” ile değişiklerinizi kaydetmeniz yeterlidir.
Yayında olan fakat sık sık “Deploy” yapılması (geliştirilmesi devam eden) gereken projelerde, kullanıcıları madur etmemek açısından tavsiye edilen bir yöntemdir.
Bu konu ile ilgili aşağıdaki bilgileri dikkate almanızı öneririm.
State server da session bilgisini saklamak istiyorsanız, session’a attığınız tüm nesneleriniz mutlaka “Serializable” olması gerekmektedir. Ağırlıklı olarak “DataTable” ı session a atıyorsanız, şanslısınızki datatable serializable bir nesnedir.
Fakat sınıflarınızı (aslında daha çok entity lerinizi) atıyorsanız, sınıflarınızı serializable yapmanız çok kolaydır. Sınıfın property sekmesinde bir serializable olup olmamasını “true / false” seçerek gerçekleştirebilirsiniz. True seçtiğinizde, sınıfınıza otomatik olarak serializable attribute eklenecektir. Ya da siz kendinizde Serializable attribute nı sınıfınıza ekleyebilirsiniz.
Bu konu ile ilgili aşağıdaki yazıları okumanızı öneririm.
- StateServer da Session_End olayın yakalanması : https://dervisali.wordpress.com/2010/01/18/stateserver-da-session_end-olayin-yakalanmasi/
Çok önemli bir ayrıntıyı eklemek istiyorum ki o da eğer state server da session bilgisini saklamak istiyorsanız, session'a attığınız tüm nesneleriniz mutlaka “Serializable” olması gerekmektedir.
Ağırlıklı olarak “DataTable” ı session a atıyorsanız, şanslısınızki datatable serializable bir nesnedir.
Fakat sınıflarınızı (aslında daha çok entity lerinizi) atıyorsanız, sınıflarınızı serializable yapmanız çok kolaydır. Sınıfın property sekmesinde bir serializable olup olmamasını “true / false” seçerek gerçekleştirebilirsiniz. True seçtiğinizde, sınıfınıza otomatik olarak serializable attribute eklenecektir. Yada siz kendinizde Serializable attribute nı sınıfınıza ekleyebilirsiniz.
Teşeküürler Mehmeh hocam msksle çok işime yaradı.
Geri bildirim: StateServer da Session_End Olayın Yakalanması « Mehmet Özakan