Завершение соединений с БД с использованием LINQ to SQL - PullRequest
1 голос
/ 09 января 2009

При разработке относительно простого веб-сервиса, который берет данные, предоставленные постом, и записывает их в таблицу базы данных, мы получаем эту ошибку:

Исключение: удаленный сервер возвратил ошибку: (500) Внутренний сервер Er или же. Трассировка стека: в System.Net.HttpWebRequest.GetResponse ()

на некоторых серверах, но не на других. Те, кто получают это, являются физическими машинами, другие - виртуальными, и, очевидно, физические серверы гораздо более мощные.

Насколько мы можем судить, проблема в том, что соединения с БД не возвращаются в пулы после каждого запроса. Я использую шаблон использования ниже:

                using (VoteDaoDataContext dao = new VoteDaoDataContext())
                {

                    dao.insert_response_and_update_count(answerVal, swid, agent, geo, DateTime.Now, ip);
                    dao.SubmitChanges();
                    msg += "Thank you for your vote.";
                    dao.Dispose();
                }

Я добавил вызов dao.Dispose (), чтобы гарантировать, что соединения завершаются, когда метод завершается, но я не знаю, нужно ли это или нет.

Правильно ли я использую этот шаблон? Есть ли что-то еще, что мне нужно сделать, чтобы убедиться, что соединения возвращаются в пулы правильно?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 09 января 2009

Ваша диагностическая информация недостаточно хороша. HTTP / 500 не достаточно подробно, чтобы действительно сказать, верна ли ваша теория. Вам нужно будет захватить трассировку полного стека в журнале, если вы хотите решить проблему. Я думаю, что вы пришли к выводу здесь. И нет, вам не нужен этот Dispose () до конца использования блока {}. Вот что с помощью {} делает .

0 голосов
/ 09 января 2009

Я думал, что вызов dispose () был излишним, но я хотел быть уверен.

Мы видим, как пулы соединений насыщаются в журналах SQL (я не могу смотреть на них напрямую, я просто разработчик, и этот материал работает в среде prod), и мой сотрудник сказал, что он видит соединения тайм-аут ... и как только они истекают, сервер начинает работать снова, пока в следующий раз не насыщает пул соединений.

Сейчас мы проходим процесс настройки параметров пула соединений ... Я хотел быть уверен, что я не сделал ничего плохого, так как я впервые использую Linq.

Спасибо!

...