2011-11-07 11 views
25

IRequiresSessionState ve IReadOnlySessionState arasındaki fark, oturum değişkenlerindeki değişiklikleri kaydetmek için ikinci yetersizlik yanında nedir?IRequiresSessionState vs IReadOnlySessionState

Hem bana HttpHandler oturum değişkenleri erişme imkanı sunar. Ama neden IReadOnlySessionState'u tercih edeyim? Sadece bir sonraki istek için oturumu kaydetmemi engelliyor.
Veya IRequiresSessionState üzerinden bana bir performans avantajı sunuyor mu?

zaman IRequiresSessionState üzerinde IReadOnlySessionState kullanmayı tercih ediyorum?

cevap

24

Bir kritik fark IRequiresSessionState böylece potansiyel olarak mevcut kullanıcıdan eşzamanlı istek # sınırlayan, geçerli oturumda özel bir kilit koyar olmasıdır. (Bu kilitleme olayı hakkında daha fazla bilgi için bkz. Is it possible to force request concurrency when using ASP.NET sessions?)

Aksine, IReadOnlySessionState özel bir kilit almaz.

Bu renad's helpful answer to an almost identical SO question belgelenen aynı şeydir.

Bunun için bulduğum en iyi resmi belgeler MSDN makalesinde Session State Providers dan: Bir oturum durumu sağlayıcıya en önemli yöntemlerden

Üç

GetItem, GetItemExclusive ve SetAndReleaseItemExclusive vardır. İlk iki veri kaynağından bir oturum almak için SessionStateModule tarafından çağrılır. İstenen sayfa IRequiresSessionState arabirimini uygularsa (varsayılan olarak, tüm sayfalar IRequiresSessionState uygular), SessionStateModule'un AcquireRequestState olay işleyicisi, oturum durumu sağlayıcısının GetItemExclusive yöntemini çağırır. Yöntem adındaki "Özel" sözcüğü, oturumun yalnızca şu anda başka bir istek tarafından kullanılmıyorsa alınması gerektiği anlamına gelir. Öte yandan, istenen sayfa IReadOnlySessionState arabirimini uygularsa, SessionStateModule sağlayıcının GetItem yöntemini çağırır (bunu başarmak için en yaygın yolu sayfanın @ Page yönergesinde bir enableSessionState = "SaltOkunur" ayrıntısını eklemektir). Burada münhasırlık gerekmez, çünkü SessionStateModule tarafından üst üste gelen okuma erişimlerine izin verilir.

Not açıkça bu arabirimleri kullanan ve EnableSessionState Sayfa yönergesini kullanarak arasındaki paralel:

  • enableSessionState = False < -> hayır I * SessionState arayüzü
  • enableSessionState = Gerçek < -> IRequiresSessionState arayüz
  • enableSessionState = SaltOkunur < -> IReadOnlySessionState
+2

+1 - ** Bir web uygulaması, aynı anda oturum durumunu kullanan bir dizi asenkron istekleri işleyebilirse, ** son derece önemlidir. –

1

IReadOnlySessionState uygulamak, sen Oturumuna salt okunur erişim gerekiyorsa

dosya biz HttpHandler ve Class'ta oturumuna erişmek Bu arayüzü kullanarak bu http://msdn.microsoft.com/en-us/library/system.web.sessionstate.irequiressessionstate.aspx

IRequiresSessionState System.Web.SessionState türetilmiştir izleyin arayüz.

+0

Evet, "IRequiresSessionState" in ne için kullanıldığını biliyorum, ancak neden IReadOnlySessionState var? Neden kullanmayı tercih edeyim? –

+0

PostMapRequestHandler'da, HttpModule gerçek işleyiciden IRequiresSessionState veya IReadOnlySessionState'i uygulayan özel bir işleyiciye geçer ve böylece görseli kullanabilir. PreRequestHandlerExecute adresinde, seansa erişebilir ve gerekirse yönlendirebilirsiniz. PostAcquireRequestState'de orjinal işleyiciye geri dönersiniz. – coder

6

arayüz kontrolleri çerçeve isteği sonunda cari oturum durumunu kurtaracak mı o. İşlem dışı oturum durumu depolama alanını kullandığınızda daha büyük bir fark yaratır. Bu durumda, arabirim olmadan, sistem, değişmemiş olsa bile (sistem oturum verilerinin istek sırasında değiştirilip değiştirilmediğini takip etmese bile) uzak veritabanında oturum verilerini saklayacaktır. IReadOnlySessionState arabirimini kullandığınızda, geri yazma aşaması atlanır.

+2

Bu bilgiyi nereden aldınız? bağlantıya başvurabilir misin? Kilitleme için –

İlgili konular