Для чего нужна WS-адресация? - PullRequest
28 голосов
/ 24 октября 2011

Я только начинаю работать с веб-сервисами SOAP и наткнулся на WS-Addressing.

Я прочитал страницу Википедии , но мне трудно понять, в чем смысл WS-Addressing.

Согласно Википедии и различным источникам в Интернете, WS-Addressing позволяет помещать «информацию об адресации» или «информацию о маршрутизации» в заголовок запроса SOAP.

Почему это полезно? Если я отправляю запрос через HTTP (или даже через SMTP или UDP), то адрес, на который я отправляю, является адресом сервера, который обработает мой запрос, и сервер может просто ответить по тому же каналу. Так зачем нужна информация об адресации / маршрутизации?

Меня особенно заинтересовал бы какой-нибудь реальный (более или менее) пример, где WS-Addressing полезна.

1 Ответ

62 голосов
/ 25 октября 2011

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

Это может произойти, когда ваш бизнес-процесс включает в себя, например, «человеческое прикосновение» (такие процессы, как те, на которые ориентируется WS-HumanTask ). Вы можете прикрепить веб-сервисы перед своим бизнесом, но иногда бизнесу требуется время. Это может быть подписка, которая должна быть проверена вручную, что-то, что должно быть одобрено, что угодно, но это займет несколько дней. Собираетесь ли вы держать соединение открытым все это время? Собираетесь ли вы делать ничего другого, кроме как ждать ответа? Нет! Это неэффективно.

Вам нужен процесс уведомления. Клиент делает запросы, но не ждет ответа. Вместо этого он указывает серверу, куда отправить ответ, используя адрес «ответить на». Как только ответ становится доступным, сервер подключается к этому адресу и отправляет ответ.

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

Но подождите ... HTTP-соединение? Почему я должен заботиться об этом? Что если я хочу, чтобы ответ был отправлен по другому типу протокола? (который SOAP любезно предоставляет, поскольку он не привязан к какому-либо протоколу).

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

Но с WS-Addressing вы не привязаны к этому. Вы можете запросить ответ на канале другого типа . Например, запрос приходит по HTTP, но вы можете указать серверу, например, отправить ответ обратно по SMTP.

Таким образом WS-Addressing определяет стандартные способы направить сообщение по нескольким транспортам. Как говорит вики-страница :

вместо того, чтобы полагаться на транспорт сетевого уровня для передачи информации о маршрутизации, сообщение, использующее WS-Addressing, может содержать собственные метаданные отправки в стандартизированном заголовке SOAP.

а что касается вашего наблюдения:

и сервер может просто ответить по тому же каналу

... что работает для некоторых, может не работать для других, а для других у нас есть WS-Addressing: D.

...