веб-методы и подключения к БД

#c# #.net #web-services

#c# #.net #веб-сервисы

Вопрос:

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

Спасибо

Ответ №1:

Глобальные переменные, как правило, именно такие, глобальные. Если ваша глобальная переменная является C # static , она будет совместно использоваться методами веб-сервиса в AppDomain. Очевидно, что это чревато ошибками — лучше, если каждый метод веб-сервиса при необходимости получает новое соединение и закрывает его до завершения работы метода.

Комментарии:

1. Мои веб-методы используют некоторый уровень DAL, который не поддерживает параллелизм. Из-за этого я пытаюсь понять, какие побочные эффекты я увижу.

2. @Night Walker Самый большой побочный эффект, который, похоже, вы можете ожидать увидеть, — это ОГРОМНОЕ снижение производительности. Я бы посоветовал найти новый DAL.

3. @Night Walker, что DAL делает с подключением? Действительно ли соединение хранится в static ? Есть ли у него правила для открытия / закрытия соединений и т.д. В зависимости от этого у вас может возникнуть серьезная проблема параллелизма, а может и нет. Если вы добавите еще немного информации к вашему вопросу, я сделаю все возможное, чтобы уточнить.

4. соединение не закрыто, у нас есть средства чтения и записи, а затем мы закрываем их, но не соединение .

Ответ №2:

Обычно веб-службы используют Http-запрос. В этом случае возможно, что при каждом вызове вам придется определять объект, поскольку служба не имеет состояния…

Ответ №3:

Для служб лучше использовать какое-то управление подключением к базе данных. Обычно вы можете адаптировать открытие / закрытие нового соединения для каждого запроса. Обратите внимание, скорее всего, вы будете работать с логическими подключениями и пулом подключений. Они полезны для значительного снижения нагрузки при открытии физического соединения. Физическое подключение создается без вашего прямого контроля и является действительно тяжелой операцией.

Не помещайте connection в общую статическую переменную, потому что connection обычно является одноразовым ресурсом, что означает, что вы должны его утилизировать. Если что-то пойдет не так и ваше соединение с базой данных будет повреждено, то все ваши последующие вызовы считаются обреченными.