#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 обычно является одноразовым ресурсом, что означает, что вы должны его утилизировать. Если что-то пойдет не так и ваше соединение с базой данных будет повреждено, то все ваши последующие вызовы считаются обреченными.