Member 1097736 Ответов: 1

Как установить ограничение по времени для таймаута в C#


У меня есть микросервис, который выполняет поисковую функцию.

На уровне доступа к данным мы используем Entity framework для общения с БД.

У нас есть миллионы записей в БД, для конкретного ключевого слова поиска требуется больше времени (приблизительно 110 секунд), так как запрос занимает время для отображения данных, контекст сущности выбрасывает исключение тайм - аута.

Внутреннее исключение :
"Свойство innerexception": {
"Сообщение": "произошла ошибка.",
"Сообщение_об_исключении": "время ожидания истекло. Время ожидания истекло до завершения операции или сервер не отвечает.",
"Тип_исключения": "Система.Данных.Sqlclient как.Sqlexception в",
"StackTrace": "в System.Data.SqlClient.SqlCommand. <> C. b__167_0 (результат Task`1) \ r \ n в System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke () \ r \ n в System.Threading.Tasks.Task.Execute () \ r \ n --- Конец трассировки стека из предыдущего места, где было сгенерировано исключение --- \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task task ) \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача задачи) \ r \ n в System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition. ,
"Свойство innerexception": {
"Сообщение": "произошла ошибка.",
"ExceptionMessage": "тайм-аут операции ожидания истек",
"ExceptionType": "Система.ComponentModel.Win32Exception",
"Трассировка стека": нуль
}

Поэтому мой вопрос заключается в том, как мне заставить код ждать, пока я не получу ответ от БД.
Есть ли какая-нибудь веб-конфигурация, которую я могу добавить, чтобы заставить код ждать?

Любые предложения/решения высоко ценятся.

Что я уже пробовал:

Я попытался установить параметр тайм-аута соединения в строке соединения на 3000 секунд.
Тайм-Аут Соединения=120;

1 Ответов

Рейтинг:
0

Richard Deeming

Тайм-аут соединения определяет, как долго ваше приложение будет ждать установления соединения с базой данных. Это никак не влияет на то, как долго приложение будет ждать выполнения запроса к базе данных.

Вам нужно изменить context.Database.CommandTimeout вместо этого собственность:
База данных.Свойство CommandTimeout (Системы.Данных.Лицо)[^]


Member 1097736

Спасибо, Ричард.Я хочу знать, есть ли какой-нибудь способ указать его в конфигурационном файле?

Richard Deeming

Не то чтобы я видел. Вы можете сохранить значение в конфигурационном файле, но вам все равно придется написать код, чтобы получить его и применить к контексту.

Member 1097736

Отличный.Спасибо!