Веб-служба .NET создается с каждым вызовом метода? - PullRequest
7 голосов
/ 17 июля 2009

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

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

Это не может быть правильно?

Ответы [ 3 ]

5 голосов
/ 17 июля 2009

Это действительно правильно.

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

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

3 голосов
/ 17 июля 2009

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

Если вы хотите, чтобы один объект оставался в живых между вызовами, WCF предлагает эту опцию. Учитывая, что ASMX устарел, вы можете перейти на WCF.

2 голосов
/ 17 июля 2009

Да, это на 100% правильно. Каждый раз, когда запрос принимается сервером, создается новый объект для обработки запроса в отдельном потоке.

Это то же самое, что происходит с базовой веб-формой ASP.NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...