別のプログラマーを開始したプロジェクトを終了しています。アーキテクチャ全体を変更することはできませんが、いくつか上書きしたいことがあります。つまり、承認、および現在のユーザーセッションを保存する方法です。プロジェクトは、soap サービスを介してサーバーと通信するクライアントを表します。サーバーには、Security-Services と、A サービス、B サービスなどのいくつかのサービスがあります。セキュリティ サービスは、他のサービスを初期化するための認証とセッション キーを提供します。このプロジェクトは ASP.NET MVC3 で記述されています。これはユーザー モデルのヘッドであり、サービスと対話する方法を記述したシングルトーン クラスとして実装されています。承認のしくみ - オーバーライドされた ValidateUser メソッドを持つ CustomMembershipProvider があり、Security-service で動作します。
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" />
Set SqlServer-mode は、SiteUser のシリアル化が困難になるため問題があります。どうすればこれを回避できますか? また、認証に問題があります - サービスのセッションで Asp.Net 同期セッションを正しく行うにはどうすればよいですか? 説明が必要な場合は、私の英語で申し訳ありません-質問してください。ありがとうございました。