I have two applications deployed on different servers.
1) ASP.net MVC 4 web application with sessionState mode="SQLServer" for session management
2) Servicestack service application with sessionState mode="SQLServer" for session management ( yes i need session in service application )
both application share same database and tables for session management
I am using following solution to have asp.net session in service stack application .
Reconnecting to Servicestack session in an asp.net MVC4 application
I am not using the servicestack session so following way is not available to me.
How can I use a standard ASP.NET session object within ServiceStack service implementation
User logs in to the mvc web application, for user data mvc application in turn calls the service methods from service stack application.
using (var client = new JsonServiceClient(servicestackUrl))
{
var response = client.Get<HttpWebResponse>(new GetFile
{
UserName = UserName,
EmployerID = EmployerID,
filename = fileName
});
//work on responce
}
now i require to have same session variables initialized in mvc application in Servicestack application deployed on another server
session cookie is set in mvc web application not on servicestack application ,but session details are stored in sql database accessible to both application.
I can get the current session id and send it to service as parameter , but how to get the session details from database using session id ?.
Update :
I have found a way to send session id to app server
var cookie = new Cookie("ASP.NET_SessionId", Session.SessionID);
cookie.Domain = ".app.localhost";
client.CookieContainer.Add(cookie);
How to get session in serviceStack application using above from sql server ?
ServiceStack doesn't use ASP.NET's Session Provider for storing Sessions, it uses its own Session API which stores Sessions into the registered Caching provider.
E.g. to have Sessions stored in SQL Server you would use
OrmLiteCacheClient
which can be registered with:To access the Session you'd need to access the Session Id (i.e. ss-id or ss-pid Cookies) which you can get from an
IRequest
with:Then you can use
SessionFeature.GetSessionKey()
to access the cache key that's used to store the Session, i.e:Which you can then access from the
ICacheClient
with:Note the easiest way to access the Session for the current user is with just:
Accessing ASP.NET Sessions within ServiceStack
Since ServiceStack is just a normal ASP.NET Web Application you can continue to access the ASP.NET Request Context via the
HttpContext.Current
singleton, e.g. you can access an ASP.NET Session with:Also as a ServiceStack Request is just an ASP.NET
IHttpHandler
underneath, you can also access the underlyng ASP.NET HttpRequest with:Note: ServiceStack has its own clean Session and Caching Providers which is completely independent from ASP.NET Session or Caching Provider model which has degraded performance by design.