2017-11-23 4 views
-1

私は、外部サービスへの接続を含むオブジェクトを持っています。ユーザーのログイン時に接続を一度初期化する必要があります。そうしないと、接続が再初期化されたときにサービスがエラーをスローします。ユーザーのために一度初期化する必要があるオブジェクトを保存するには、すべてのページで使用できるようにする必要があります。

接続は常に開いている必要があり、サービスを呼び出す複数のコントローラが使用できるようにする必要があります。

私はASP MVC & C#を使用しています。私は現在、ユーザーセッションが開始され、それをユーザーセッションに格納するときに、変数を初期化しています。私はこのアプローチの他の選択肢があるのだろうかと思います。

変数のセッションを初期化し、私は

public static SomeConnection GetSomeConnection(this HttpSessionStateBase session) 
{ 
    return (SomeConnection) HttpContext.Current.Session["SomeConnection"]; 
} 
+0

[MVC Global Variables](https://stackoverflow.com/questions/5118610/asp-net-mvc-global-variables) – MethodMan

+0

は私の質問をコード –

+0

で更新しました。 'Session_Start'メソッドにブレークポイントを置くと、各接続がユニークでなければならないので、静的変数は動作しません。 –

答えて

0

別のアプローチは、あるセッションからの接続取得する拡張メソッドを使用すると

protected void Session_Start(object sender, EventArgs e) 
{ 
    HttpContext.Current.Session.Add("SomeConnection", new SomeConnection()); 
} 

:あなたは、負荷分散サーバーにデプロイしている場合は をしますこのアプローチを有効にするには、セッションの粘着性を確保する必要があります。

そうしないと、AppFabricを使用してオブジェクトを独立したサーバーに格納し、すべてのサーバーで使用できるようにすることができます。このようにして、オブジェクトを一度しか初期化することもありません。

GetExistingOrSetメソッドを使用してください。

関連する問題