У меня есть веб-приложение MVC 4, которое вызывает бизнес-уровень, который асинхронно вызывает метод уровня данных 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'
Проблема заключается в том, когда я вызываю эту хранимую процедуру через мое веб-приложение, развернутое на моем тестовом сервере с клиентского компьютера A, все дальнейшие вызовы от того же клиента или любого другого пользователя, вызывающего веб-страницу, зависают до 2 минут. в хранимой процедуре. Когда я запускаю хранимую процедуру непосредственно из студии управления sql и параллельно запускаю другую инструкцию sql, выполнение хранимой процедуры занимает 2 минуты, а другая инструкция sql выполняется немедленно. Не похоже, что на стороне базы данных есть что-то, что мне нужно изменить. В чем может быть проблема с моим кодом?
Спасибо
AsyncController
? Вы также можете проверить его статус во время выполнения, используя что-то вроде этого: stackoverflow.com/questions/2927284/ - person Brad Christie   schedule 14.05.2013