Чи можна збільшити час очікування, змінивши рядок з'єднання в web.config
?
Чи можна збільшити час очікування, змінивши рядок з'єднання в web.config
?
Відповіді:
Так, ви могли б додати ;Connection Timeout=30
до вашої рядку з'єднання і вказати значення , яке ви хочете.
Значення тайм-ауту, встановлене у Connection Timeout
властивості, - це час, виражений у секундах . Якщо ця властивість не встановлена, значенням затримки для з'єднання є значення за замовчуванням (15 секунд).
Крім того, встановлюючи значення тайм-ауту 0
, ви вказуєте, що ваша спроба з'єднання чекає нескінченний час. Як описано в документації, це не слід встановлювати у рядку з'єднання:
Значення 0 вказує на обмеження, і його слід уникати в ConnectionString, оскільки спроба з'єднання чекає нескінченно.
Гммм ...
Як сказав Дарін, ви можете вказати більше значення тайм-ауту для з'єднання, але я сумніваюся, що це справді проблема.
Коли ви отримуєте тайм-аути підключення, зазвичай це проблема одного з наступних:
Конфігурація мережі - повільний зв'язок між вашим веб-сервером / полем розробки та SQL-сервером. Збільшення тайм-аута може виправити це, але було б розумно дослідити основну проблему.
Рядок з'єднання. Я бачив проблеми, коли неправильне ім’я користувача / пароль чомусь призведе до помилки очікування замість реальної помилки із зазначенням "заборонено в доступі". Це не повинно відбуватися, але таке життя.
Рядок підключення 2: Якщо ви вказуєте ім'я сервера неправильно або неповно (наприклад, mysqlserver
замість цього mysqlserver.webdomain.com
), ви отримаєте тайм-аут. Чи можете ви пінг-сервер, використовуючи ім’я сервера точно так, як зазначено в рядку з'єднання з командного рядка?
Рядок підключення 3: Якщо ім'я сервера знаходиться у вашому DNS (або файлі хостів), але вказує на неправильний або недоступний IP-адресу, ви отримаєте тайм-аут, а не помилку, яку не знайшли машини.
Час запиту закінчується. Це може виглядати як проблема з підключенням до сервера, але, залежно від структури вашого додатка, ви можете зробити це до стадії, де виконується ваш запит до того, як настане час очікування.
Підключення протікає. Скільки запущених процесів? Скільки відкритих з'єднань? Я не впевнений, чи необроблений ADO.NET здійснює об'єднання з'єднань, автоматично закриває з'єднання при необхідності ala Enterprise Library або там, де все налаштовано. Це, мабуть, червона оселедець. Однак, працюючи з WCF та веб-службами, у мене виникли проблеми із незамкнутими зв’язками, що спричиняло тайм-аути та іншу непередбачувану поведінку.
Що потрібно спробувати:
Чи отримуєте ви тайм-аут під час підключення до сервера за допомогою SQL Management Studio? Якщо так, то, можливо, проблема з мережевим налаштуванням. Якщо ви не бачите проблем під час з'єднання з Management Studio, проблема буде у вашому додатку, а не з сервером.
Запустіть SQL Profiler і подивіться, що насправді відбувається через провід. Ви повинні бути в змозі сказати, чи дійсно ви підключаєтесь, чи проблема з проблемою.
Запустіть свій запит у студії управління і подивіться, скільки часу це займе.
Удачі!
Якщо ви хочете динамічно змінити це, я вважаю за краще використовувати SqlConnectionStringBuilder .
Це дозволяє перетворити ConnectionString, тобто рядок, в клас Object, Усі властивості рядка з'єднання стануть його Учасником.
У цьому випадку реальною перевагою буде те, що вам не доведеться турбуватися, якщо частина рядка ConnectionTimeout вже існує в рядку з'єднання чи ні?
Крім того, оскільки він створює Об'єкт і завжди добре присвоювати значення об'єкту, а не маніпулювати рядком.
Ось зразок коду:
var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);
sscsb.ConnectTimeout = 30;
var conn = new SqlConnection(sscsb.ConnectionString);
ConnectionTimeout
властивість SqlConnection
типу типу лише для читання вважалося гарною ідеєю.