のは、私は私のASP.NET WebAPIのアプリケーションでは、次のApiControllerがあるとしましょう:WebAPIのコントローラの再利用
class MyApiController : ApiController
{
private string str;
[HttpGet]
public string SetStr(string str)
{
this.str = str;
MaybeSleep(); // Some executions take longer, some don't.
return this.str;
}
}
(リアリティは少し複雑ですが、これは重要なことのすべてでなければなりません)
はこれがあります私の環境などでうまく動いていて、サーバー負荷が重い場合でも常に入力値を返します。
しかし、2つの環境では、サーバーの負荷があまり高くなくても、str は時々セットとリターンの間で「魔法のように」変化します。ただし、常にその時刻にサーバーに送信された値に変更されます。
だから、私の質問は以下のとおりです。
- ApiController私はちょうどサーバープロセスを期待しなければならない、またはすべての単一の要求に対して新しいApiController、作成に使用して破棄しなければならない行動を再利用しますか?
- この動作は、ASP.NETのバージョン、IISのバージョン、Web.configの設定によって異なりますか?
- Microsoftから入手できるプライベートApiController変数の動作に関するドキュメントはありますか?
- これはおそらく、特定の.NETまたはASP.NETバージョンの既知のバグですか?
あなたは、共有リソースが干渉していない限り、これを分離する必要があるように、新しいコントローラは、要求ごとに作成されます。 –
私はあなたの例が間違っていて、実際の状況を反映していないと確信しています。まず第一に、コントローラーをそのように再利用することはできないと思います(もし私が本当に私のプロジェクトのいくつかを心配することができたら)。二番目に再利用されたかどうかは、引数を返すだけです。フィールドを一種のローカル変数として使用しています。 – Stilgar
複数の呼び出しで同じApiControllerリファレンスを使用している場合を除きます。 (グローバルコントローラを作成してメソッドを呼び出すと、すべての呼び出しに対して属性が書き換えられます)、あなたは良いことがあるはずです。そして、スティルガーが言ったように、これはおそらく全体の状況ではないでしょうし、おそらくもっとそれがあるようです。 –