В течение нескольких дней в приложении ASP. NET 2.0 & SQL Server 2008 наблюдаются тайм-ауты транзакций в БД.
Проблема связана с использованием SQL трассировки профилировщика сервера для "функция, вызывающая веб-сервис".
У нас есть транзакция, включающая несколько хранимых процедур (sp). Но у хранимой процедуры № 3 есть несколько байтов для сохранения в БД, она требует времени. Если время превышает 25 секунд, выдается сообщение об исключении тайм-аута:
Сообщение: System.Web.Services.Protocols.SoapException: серверу не удалось обработать запрос. ---> System.Data.SqlClient.SqlException: истекло время ожидания. Период ожидания истек до завершения операции, или сервер не отвечает.
в System.Data.SqlClient.SqlInternalConnection.OnError (исключение SqlException, логическое прерывание связи)
в System.Data.SqlClient. TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj)
Мой код:
using (System.Data.Common.DbConnection connection = o_DB.CreateConnection())
{
connection.Open();
System.Data.Common.DbTransaction o_Transaction = connection.BeginTransaction();
try
{
- exec sp1
- exec sp2
foreach{
- exec sp3
}
}
Мы пробовали некоторые решения в Интернете, но они не работали. Я надеюсь, что кто-то может помочь мне. Большое спасибо.
У нас нет timeout
в строке подключения в web.config
, он не страдает от исключения после 15 с (по умолчанию)
Устанавливаем время ожидания транзакции в web.config
:
<system.transactions>
<machineSettings maxTimeout="00:00:30" />
</system.transactions>