#web-services #soap #ws-addressing
#веб-сервисы #soap #ws-адресация
Вопрос:
Я только начинаю работать с веб-сервисами SOAP и наткнулся на WS-адресацию.
Я прочитал страницу Википедии, но мне трудно понять, в чем смысл WS-адресации.
Согласно Википедии и различным источникам в Интернете, WS-адресация позволяет помещать «информацию об адресации» или «информацию о маршрутизации» в заголовок запроса SOAP.
Почему это полезно? Если я отправляю запрос через HTTP (или даже через SMTP или UDP), то адрес, на который я отправляю, является адресом сервера, который обработает мой запрос, и сервер может просто ответить по тому же каналу. Итак, зачем нужна информация об адресации / маршрутизации?
Меня бы особенно заинтересовал какой-нибудь реальный (более или менее) пример, где WS-адресация полезна.
Ответ №1:
Я обнаружил, что WS-адресация особенно полезна в ситуациях, когда ответ SOAP не может быть отправлен немедленно. Либо ресурсы для формирования ответа недоступны сразу, либо сам результат генерируется долго.
Это может произойти, когда ваш бизнес-процесс включает, например, «человеческое прикосновение» (процессы, подобные тем, на которые нацелен WS-HumanTask). Вы можете использовать веб-сервисы перед своим бизнесом, но иногда бизнес требует времени. Это может быть подписка, которую необходимо проверить вручную, что-то, что нужно одобрить, что угодно, но на это уходят дни. Вы собираетесь поддерживать соединение открытым все это время? Вы собираетесь ничего не делать, кроме как ждать ответа? Нет! Это неэффективно.
Что вам нужно, так это процесс уведомления. Клиент отправляет запросы, но не ждет ответа. Вместо этого он указывает серверу, куда отправить ответ, используя адрес «ответить на». Как только ответ доступен, сервер подключается к этому адресу и отправляет ответ.
И вуаля … асинхронные взаимодействия между веб-сервисами, отделяющие время жизни процесса связи от времени жизни HTTP-соединения. Очень полезно…
Но подождите… HTTP-соединение? Почему меня это должно волновать? Что, если я хочу, чтобы ответ был отправлен обратно по протоколу другого типа? (который любезно предоставляет SOAP, поскольку он не привязан ни к какому протоколу).
При обычном потоке запросов / ответов ответ приходит по тому же каналу, что и запрос, если это известное вам соединение…. Итак, например, у вас есть HTTP-соединение… это означает HTTP in и HTTP out.
Но с WS-адресацией вы к этому не привязаны. Вы можете запросить ответ по каналу другого типа. Запрос приходит, например, по HTTP, но вы можете указать серверу отправить ответ обратно, например, по SMTP.
Таким образом, WS-адресация определяет стандартные способы маршрутизации сообщения по нескольким транспортным каналам. Как говорится на странице wiki:
вместо того, чтобы полагаться на транспорт сетевого уровня для передачи информации о маршруте, сообщение, использующее WS-адресацию, может содержать свои собственные метаданные отправки в стандартизированном заголовке SOAP.
а что касается вашего наблюдения:
и сервер может просто отвечать по тому же каналу
… то, что работает для одних, может не работать для других, а для других у нас есть WS-адресация: D.