Веб-службы, пул соединений ADO.NET, ошибка тайм-аута - PullRequest
0 голосов
/ 08 апреля 2009

Если у меня есть веб-служба .asmx, которая предоставляет только один вызов. Тот, который принимает несколько параметров и вставляет эти значения в виде записи в таблицу SQL Server 2005. Как должен выглядеть этот метод, чтобы быть как можно более «добрым» к пулу соединений ADO.NET? Как это должно выглядеть, если его будут вызывать, может быть, 10 раз в секунду (распределять) по нескольким клиентам. Любые другие настройки, которые я должен настроить?

В настоящее время я получаю сообщение об ошибке:

System.Web.Services.Protocols.SoapException:
Серверу не удалось обработать запрос -> System.Data.SqlClient.SqlException: истекло время ожидания. Период ожидания истек до операции или сервер не отвечает.

Будет ли ошибка другой, если проблема связана с пулом соединений? Как я могу определить, является ли это проблемой пула соединений, ограничением SOAP или моя база данных настолько занята, что вызовы действительно истекают?

1 Ответ

1 голос
/ 08 апреля 2009

Вы не публикуете самую важную информацию о том, что вы делаете. Тот факт, что это веб-метод, является «красной селедкой», он просто сводится к проблеме с базой данных и к тому, сколько вы ее забиваете.

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

Кроме того, я бы посмотрел, используете ли вы транзакции. Если это включено в соединение, и время ожидания истекло для операции, и вы используете транзакции, то используете ли вы транзакции для доступа к этой таблице где-либо еще (чтение или запись), которая включена в транзакцию? В этот момент это может быть тупик.

Запрет всего этого, если это не так, то это проблема с подключением, и вам нужно посмотреть, правильно ли настроены машина и сервер (например, используете ли вы tcp ip, именованные каналы или разделяемую память) ) для операций с базой данных.

...