2017-08-08 35 views
0

私はセッション変数を使用する代わりに見つけようとしています。私のソリューションでは、ASP.NET Webアプリケーションとコンソールアプリケーションによって参照されるプロジェクトがあります。これらのアプリケーションはどちらもデータに変更を加えることができ、変更が行われると、変更を行ったユーザーのIDがその行に対して記録されます。セッション変数の代わりに

ASP.NETアプリケーションが変更を加えただけの場合は、myObj.LastUpdatedByID = Session["userid"]のような処理を行うことができます。コマンドラインアプリケーションでセッションを変更する必要がある場合、ASP.NETのセッションスコープに相当するものを使用できますが、コンソールアプリケーションスコープでも使用できます。

私はMemoryCacheを見てきましたが、これはASP.NETのアプリケーションレベルのようです。

私は、各通話にユーザーIDを渡す行を下ろうとしません。

HttpContextをチェックするようなことをして、もしあれば、セッションから引き出し、そうでなければ、MemoryCahceから引き出すでしょうか?それとももっと良い方法がありますか?

編集: ユーザーIDは、実行されている操作に応じて、コンソールアプリケーションで特に設定されます。コンソールアプリは自動化されたプロセスに使用され、実行するアクションは数多くあります。例えば、送信電子メールプロセスはユーザーID 1によって実行され、古いファイルプロセスの削除はユーザーID 2によって実行されます。一部のインスタンスでは、ユーザーIDは最後に作成されたユーザーIDに設定されますその行のデータへの変更。

編集: いくつかのコード例(簡潔にするために削除されています)。そして、あなたが使用することはできませんデータがアプリケーション間で統一する必要がある場合

public class Base(
{ 
    private int auditID = -1; 
    public int AuditID 
    { 
     get 
     { 
      if (this.auditID <= 0) 
      { 
       ObjectCache memCache = MemoryCache.Default; 
       this.auditID = ((int)memCache["CurrentUserID"]); 
      } 
      return this.auditID; 
     } 
    } 
} 

public class MyObject : Base 
{ 
    public int LastUpdatedByID { get; set; } = 0; 

    public bool Save() 
    { 
     bool b = false; 
     this.LastUpdatedByID = this.AuditID; 
     //Call to DB here... 
     return b; 
    } 
} 
+0

のようないくつかのデータベースのような永続的なデータストアまたは分散キャッシュにデータを格納するだろうか? – CodeCaster

+0

@CodeCaster編集を追加しました – TechyGypo

+0

オブジェクトを更新するコードを表示します。クラスライブラリはSystem.Webを参照すべきではありません。 – CodeCaster

答えて

0

:あなたは、私はASP.NETアプリケーションでアプリケーションではありません使用可能なため、広いとなり理解し、ここでMemoryCacheを、使用しています見ることができますSessionまたはHttpContext.Cacheは、コンソールアプリにない現在のHttpContextに依存しているためです。

別の方法として、ユーザーはコンソールアプリで認証されたどのようRedis Cache/Azure Mem Cache

+0

私は混乱している場合があります。私は、コンソールアプリケーションとASP.NETアプリケーションの間でIDを共有する必要はありません。彼らがIDについて知っている両方のプロジェクトを参照する必要があります。コンソールアプリケーションは_core_を使用します。 ASP.NETは_core_を使用します。 _core_はユーザーIDを知る必要があります。 ref'dプロジェクトは、DLLにコンパイルするクラスの束です。 – TechyGypo

関連する問題