0

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 ステートメントがすぐに実行されます。データベース側に変更が必要なものがあるようには見えません。私のコードの問題は何ですか?

ありがとう

4

0 に答える 0