我正在完成一个启动另一个程序员的项目。改变整个架构是不可能的,但有些东西我想覆盖。即 - 授权,以及存储当前用户会话的方式。该项目代表一个通过soap-services与服务器通信的客户端。在服务器上,有 Security-Services,还有其他几个,例如 A-service、B-Service。安全服务提供用于初始化其他服务的身份验证和会话密钥。该项目是用 ASP.NET MVC3 编写的,它是一个用户模型的头部,它被实现为 singletone-Class,它描述了与服务交互的方法。授权是如何工作的 - 有一个带有重写 ValidateUser 方法的 CustomMembershipProvider,它在安全服务上运行。
class SiteUser
{
public static SiteUser Current
{
get
{
if (HttpContext.Current.Session.IsNewSession & &! HttpContext.Current.User.Identity.IsAuthenticated)
{
throw new UserAutorizationExeption () {Reason = AuthExceptionReason.NewSession};
}
if (HttpContext.Current.Session [sessionKey] == null)
{
FormsAuthentication.SignOut ();
throw new UserAutorizationExeption () {Reason = AuthExceptionReason.ServerSessionExpired};
}
return HttpContext.Current.Session [sessionKey] as W1User;
}
set
{
if (HttpContext.Current.Session! = null)
{
HttpContext.Current.Session [sessionKey] = value;
}
}
}
public SiteUser ()
{
}
public static SiteUser Create ()
{
SiteUser.Current = new SiteUser ();
return SiteUser.Current;
}
/ / Web-services methods go here
}
主要问题是现在会话存储在内存中:web.config:
<sessionState mode="InProc" timeout="20" />
设置 SqlServer-mode 是有问题的,因为它很难将 SiteUser 序列化。我怎样才能解决这个问题?并且授权存在问题 - 如何正确地使用服务会话进行 Asp.Net 同步会话?对不起我的英语,如果需要澄清 - 问问题。谢谢你。