我有一个MVC 4 Web应用程序,它调用业务层,异步调用数据层方法ExecuteSP
。数据层方法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分钟已过。 当我直接从sql management studio运行存储过程并并行运行另一个sql语句时,存储过程需要2分钟执行,而另一个sql语句立即执行。它看起来不像我需要改变数据库方面的东西。我的代码可能有什么问题?
由于