2 using System.Collections.Generic;
\r
5 using System.Web.J2EE;
\r
6 using System.Web.SessionState;
\r
8 namespace Mainsoft.Web.Hosting
\r
10 public static class SessionWrapper
\r
12 static readonly Type IRequiresSessionStateType = typeof (IRequiresSessionState);
\r
13 static readonly Type IReadOnlySessionStateType = typeof (IReadOnlySessionState);
\r
15 public static IHttpHandler WrapHandler (IHttpHandler handler) {
\r
16 Type type = (Type) ((IServiceProvider) handler).GetService (typeof (Type));
\r
18 if (IRequiresSessionStateType.IsAssignableFrom (type))
\r
19 return IReadOnlySessionStateType.IsAssignableFrom (type) ?
\r
20 new ReadOnlySessionWrapperHandler (handler) : new SessionWrapperHandler (handler);
\r
23 public static IHttpHandler WrapHandler (IHttpExtendedHandler handler) {
\r
24 Type type = (Type) ((IServiceProvider) handler).GetService (typeof (Type));
\r
26 if (IRequiresSessionStateType.IsAssignableFrom (type))
\r
27 return IReadOnlySessionStateType.IsAssignableFrom (type) ?
\r
28 new ReadOnlySessionWrapperExtendedHandler (handler) : new SessionWrapperExtendedHandler (handler);
\r
32 #region SessionWrappers
\r
34 class SessionWrapperHandler : IHttpHandler, IRequiresSessionState, IServiceProvider
\r
36 protected readonly IHttpHandler _handler;
\r
38 public SessionWrapperHandler (IHttpHandler handler) {
\r
42 public bool IsReusable {
\r
43 get { return _handler.IsReusable; }
\r
46 public void ProcessRequest (HttpContext context) {
\r
47 _handler.ProcessRequest (context);
\r
50 public object GetService (Type serviceType) {
\r
51 return ((IServiceProvider) _handler).GetService (serviceType);
\r
55 sealed class ReadOnlySessionWrapperHandler : SessionWrapperHandler, IReadOnlySessionState
\r
57 public ReadOnlySessionWrapperHandler (IHttpHandler handler) : base (handler) { }
\r
62 #region ExtendedSessionWrappers
\r
64 class SessionWrapperExtendedHandler : SessionWrapperHandler, IHttpExtendedHandler
\r
66 public SessionWrapperExtendedHandler (IHttpExtendedHandler handler)
\r
70 public bool IsCompleted {
\r
71 get { return ((IHttpExtendedHandler) _handler).IsCompleted; }
\r
75 sealed class ReadOnlySessionWrapperExtendedHandler : SessionWrapperExtendedHandler, IReadOnlySessionState
\r
77 public ReadOnlySessionWrapperExtendedHandler (IHttpExtendedHandler handler) : base (handler) { }
\r