Esempio n. 1
0
        public void Configuration(Owin.IAppBuilder app)
        {
            // enable RedisSession Middleware.
            // RedisSession
            app.UseRedisSession(new RedisSessionOptions(new RedisSettings("127.0.0.1")));
            app.Run(async context => // request begin, Get all values from Redis server.
            {
                // take session from owin environment(IDictionary<string, object>)
                var session = context.Environment.AsRedisSession();

                // TryGet(or Get) take from local storage.
                DateTime lastAccess;
                int accessCount = 1;
                if (session.TryGet<DateTime>("LastAccess", out lastAccess) && session.TryGet<int>("Counter", out accessCount))
                {
                    accessCount++;
                    await context.Response.WriteAsync("AccessCount " + accessCount);
                    await context.Response.WriteAsync(", LastAccess from RedisSession => " + lastAccess.ToString());
                }
                else
                {
                    await context.Response.WriteAsync("First Access");
                }

                // Set(or Remove) set to local storage and enqueue operation.
                session.Set("Counter", accessCount);
                session.Set("LastAccess", DateTime.Now);

                context.Response.ContentType = "text/plain";
            }); // request end, queued set(or delete) values to Redis server.

            // context save pattern, can take everywhere.
            //app.UseRequestScopeContext();
            //app.UseRedisSession(new RedisSessionOptions(new RedisSettings("127.0.0.1")));
            //app.Run(async context =>
            //{
            //    Store();

            //    int v = -1;
            //    context.Environment.AsRedisSession().TryGet<int>("test", out v);
            //    context.Response.ContentType = "text/plain";
            //    await context.Response.WriteAsync(v.ToString());
            //});
        }