Как ADO.NET Connection Pooling работает с веб-службами .ASMX? - PullRequest
1 голос
/ 18 декабря 2010

Я создал веб-сервис .ASMX старого стиля и хотел бы узнать, как с ним работает встроенный пул соединений ADO.NET.

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

Я прочитал, что пул поддерживается для домена приложений, но я не уверен, генерирует ли каждый запрос новый домен приложений.

Мне также любопытно, было бы полезно установить в этом случае минимальный размер пула (с небольшим числом, отличным от 0).

Кто-нибудь знает?

1 Ответ

3 голосов
/ 18 декабря 2010

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

Одно уточнение.У вас может быть два разных веб-приложения, которые указывают на один и тот же код и находятся в разных доменах приложений.Два приложения ничего не делят (подумайте о запуске одного и того же приложения дважды).

Мне также любопытно, было бы полезно установить в этом случае минимальный размер пула (с небольшим числом, отличным от 0).

Так что это может быть полезно в зависимости от приложения.Создание соединений требует времени, поэтому наличие некоторой готовности позволяет вам отказаться от этого.Если у вас есть запрос, скажем, использует одно соединение, это может быть хорошо, чтобы заставить человека ждать (все зависит от того, как быстро вы хотите, чтобы приложение ответило).Это может действительно вступить в игру, когда вам нужно сказать 3 или 4 разных (вы получаете очко) открытых для одного запроса.Так зачем вам несколько соединений?Как насчет доступа к данным и отдельного потока для входа в базу данных (вход в базу данных по сравнению с файлом - совершенно другой разговор)?Теперь вам нужно два.Есть несколько сценариев, где это может вступить в игру.В зависимости от того, какой сервер базы данных поддерживает открытое соединение, может быть довольно дешевым, поэтому установка его на небольшое количество может оказаться огромной выгодой для вас.(Для примера, я видел сценарии, в которых подключение к базе данных занимало несколько секунд, например 3-5, поэтому в этом случае поддержание открытого подключения для пользователя было выгодно.)

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

...