ASP.Net MVCプロジェクトがあります。 Global.asaxのでは定義があります:ASP.Net MVC + static ConcurrentDictionary
public class Application : System.Web.HttpApplication
{
public static ConcurrentDictionary<string, HttpSessionState> UserSessions = new ConcurrentDictionary<string, HttpSessionState>();
...
このようLoginControllerで使用されています:それは十分に働いていたが、今私は新しいアセンブリ(クラスライブラリを追加する必要がありました
public class LoginController : BaseController
{
public ActionResult DoLogin(AuthorizationViewModel authorizationViewModel)
{
...
var session = System.Web.HttpContext.Current.Session;
Application.UserSessions.TryAdd(session.SessionID, session);
プロジェクト)の代わりにLoginControllerを使用します。このライブラリは起動時にロードされ、AlternativeLoginControllerはWindsorコンテナに登録されています)。 (追加の組立プロジェクト内)
public class AlternativeLoginController : BaseController
{
public ActionResult DoLogin(AuthorizationViewModel authorizationViewModel)
{
...
var session = System.Web.HttpContext.Current.Session;
Application.UserSessions.TryAdd(session.SessionID, session);
ネイティブ(Webプロジェクト内)DoLoginと鉱山Iかのように、同様の動作するはずです:私はこのようにそれを行うました。ネイティブのDoLoginは完全に機能し、新しいユーザーがすべて問題なくApplication.UserSessions ConcurrentDictionaryに追加されます。しかし、私のDoLoginが呼び出されると、サーバー上の許可されたユーザーに関係なく、Application.UserSessions.Countは0として表示されます。また、Application.UserSessions.TryAddに達すると、ネイティブのDoLoginによって許可されたすべてのユーザーが不正になります。 どうすれば可能ですか?なぜ公共の静的なApplication.UserSessionsがWebプロジェクトコードと追加のアセンブリコードの中で異なった働きをするのですか?
更新:バグを発見しました。私の前に.dllを担当していた人がログを追加しました。 DoLoginを呼び出すたびに、... binフォルダに.xml形式のログファイルを保存していました。タダム! binフォルダが変更されているので、サーバーはすぐに再起動し、すべてのセッションが閉じられ、空のApplication.UserSessionsが表示されます。
'追加のアセンブリプロジェクト'とは何ですか?それはMVCプロジェクトで使用されるアセンブリを生成する別のクラスライブラリですか? – Maarten
はい、クラスライブラリです。起動時にロードされ、コントローラがWindsorコンテナに登録されています。 –
何らかの理由で別の 'AppDomain'にあると私は考えることができます。 – Maarten