ExecuteSP
データ層メソッドを非同期的に呼び出すビジネス層を呼び出す MVC 4 Web アプリケーションがあります。データ層メソッド ExecuteSP は、次のような長時間実行ストアド プロシージャを呼び出します。
public class MainDataLayer
{
private Database database; //Enterprise library 5
private DbCommand dbc;
private List<SPParams> spParams;
public MainDataLayer()
{
_database = DatabaseFactory.CreateDatabase("strConn");
//set multiple sp params like the one below
_spParams.Add(new SPParams() { ParamName = "@pID", ParamValue = ID });
}
public DataSet ExecuteSP()
{
dbc = database.GetStoredProcCommand('long_running_sp');
dbc.CommandTimeout = 300;
foreach (SPParams p in spParams)
{
dbc.Parameters.Add(new SqlParameter(p.ParamName, p.ParamValue));
}
DataSet ds = _database.ExecuteDataSet(dbc);
return ds;
}
}
//this class is used in the class above for setting the sp parameters
public class SPParams
{
public string ParamName { get; set; }
public object ParamValue { get; set; }
}
長時間実行されるストアド プロシージャには、長時間実行されるプロセスをシミュレートするために、以下のようにいくつかの挿入といくつかの更新、および最終的なタイムアウト呼び出しがあります。
WAITFOR DELAY '0:02:00'
問題は、クライアント pc A からテスト サーバーにデプロイされた Web アプリケーションを介してこのストアド プロシージャを呼び出すと、ストアド プロシージャの 2 分が経過するまで、同じクライアントまたは Web ページを呼び出している他のユーザーからのすべての呼び出しがハングすることです。ストアド プロシージャを SQL Management Studio から直接実行し、別の SQL ステートメントを並べて実行すると、ストアド プロシージャの実行に 2 分かかり、他の SQL ステートメントがすぐに実行されます。データベース側に変更が必要なものがあるようには見えません。私のコードの問題は何ですか?
ありがとう