Веб-сервисы с отслеживанием состояния и без отслеживания состояния

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


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

Веб-сервисы без сохранения состояния, имеющие следующие свойства (в нашем случае):

+ high scalability
+ high availability
+ high speed
+ rapid testing
- bloated contract
- implementing more logic on server-side

Но мы можем вычеркнуть первые два пункта, нашему приложению не нужна высокая масштабируемость и доступность.

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

+ simplifies contract (protocol)
- bad testing
- runs counter to the basic architecture of http 

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

Так почему же это так плохо для веб-сервисов?


person Christopher Klewes    schedule 06.04.2010    source источник
comment
Довольно близко к обману: stackoverflow.com/questions/988819/stateful-webservice   -  person gregmac    schedule 07.04.2010
comment
Поместите состояние в место, которое может легко обрабатывать состояние: база данных   -  person marc_s    schedule 07.04.2010


Ответы (3)


Потому что сохранять состояние в веб-сервисе сложно, и если вы не будете очень осторожны и / или не будете иметь опыта, рано или поздно вы можете столкнуться с некоторыми очень трудными для поиска ошибками.

person Darin Dimitrov    schedule 06.04.2010
comment
Ну, это зависит от платформы. Часто контейнер позаботится о сеансах за вас. - person MK.; 07.04.2010
comment
Почему бы просто не использовать контейнер, предназначенный для этой цели, например RDMS. - person Darin Dimitrov; 07.04.2010
comment
Я не уверен, что понимаю. Если вы помещаете что-то в RDMS, это в основном означает запуск ваших собственных сеансов, которые, вероятно, будут работать хуже. Не похоже, что ему нужна постоянная информация во время сеанса, так зачем помещать ее туда? - person MK.; 07.04.2010
comment
Под помещением состояния в базу данных я имел в виду разработку методов веб-служб, способных извлекать состояние из базы данных. Например, предпочтительнее использовать веб-метод User GetUser(int userId) вместо User GetUser(), который будет искать в каком-то настраиваемом контейнере состояния для текущего идентификатора пользователя и возвращать его информацию. Потребитель веб-службы должен решить, как обрабатывать состояние. - person Darin Dimitrov; 07.04.2010

Мне довольно повезло с веб-сервисами с отслеживанием состояния. Они действительно кажутся немного грязными, потому что сеанс дырочных файлов cookie поверх HTTP таков; но с другой стороны, это протокол SOAP, так что было бы глупо слишком расстраиваться из-за красоты на этом этапе.

Одна вещь, о которой следует помнить, - это совместимость: если вы используете веб-службу с отслеживанием состояния, ваши клиенты должны будут поддерживать ту же идею состояния, что и вы (обычно файлы cookie). Но опять же - у меня все заработало.

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

person MK.    schedule 06.04.2010

В штате также прячется большинство ошибок.

person SamB    schedule 06.04.2010