Стили SOAP

MiksIr

miksir@home:~$
А может кто сможет на пальцах объяснить разницу между rpc и document?

А еще... это допустимо, что SOAP клиент меняет формат входных и выходных параметров при смене стиля? В частности речь, конечно, про SoapClient.

Предыстория: один банк сменил стиль, благо, на тестовом сервере. Только стиль, больше в общем ничего не поменялось в WSDL. И все посыпалось, ибо если раньше метод хотел массив с атрибутами, то теперь хочет массив массивов. Сейчас я их пинаю - это они случайно или специально, и вот интересно стало, как с другими клиентами обстоят дела.
 

WMix

герр M:)ller
Партнер клуба
я боюсь что сейчас глупость скажу, но я не вижу связи между SOAP RPC и document
те я понимаю что rpc может использовать SOAP но куда документ прицепить или хуже того стиль?
а когда я думаю про SoapClient я вообще не думаю про SOAP все описано в WSDL и нужно понимать как вызвать ту или иную функцию но и это можно прочитать в самом WSDL. другими словами SOAP это чтото там в глубине чего я не касаюсь. (тебя сильно интересует как устроен TCP/IP или какие кабеля использованны при http передаче?)

может просто версия SOAP сменилась и только это и нужно поменять (но и это по идеи сообщает WSDL)? или caсhe отключить
PHP:
ini_set("soap.wsdl_cache_enabled", 0);
а вот ответ сервера легко может измениться как и сигнатура метода, или другими словами вопрос в обратной совместимости тут никак не стоит
 

MiksIr

miksir@home:~$
Глупость скажете ;) Вернее сказали ;) Ну это ничего, я до сегодня тоже не знал про стили. Если посмотрите wsdl, то увидите у binding такой атрибут - style. Он может быть rpc или document. Как я понял, это определяет то, как будет сформирован body запроса и вообще стиль запроса - жесткая структура "имя функции > параметры функции" (rpc стиль) или свободный XML описываемый схемой (document стиль). Но в общем до конца я разницу не понял. Да и не то, что бы горю желанием. А вот различие при работе с клиентом меня волнуют ;)
 

WMix

герр M:)ller
Партнер клуба
http://www.w3.org/TR/wsdl#_soap:operation
а что тебе это меняет? каким образом ты повлияешь на ход дальнейших событий? или лучше, почему б не поглядеть на response или output, не помню, в messages и не увидеть что вернется комплексный тип
 

dadoc

Новичок
Скорее всего у там использовался rpc/literal binding/encoding, который в принципе можно заменить на document/literal binding/encoding. В общем то Вы уже правильно подметили что основная разница между RPC и document в том как определяться обработчик этого запроса. В RPC первый элемент в soap body это название операции/метода, в случае document binding название операции/метода передается не внутри soap message body а в header и содержание body может быть любым.

Есть определенный "паттерн" который называется wrapped document/literal когда используют роутинг rpc binding (первый элемент внутри body название операции). При этом можно дергать как бы один soap метод, подсовывая разные document из которых по первому элементу будут понятно кто должен обрабатывать запрос.

Странно что перестало работать, может что то еще поменялось в wsdl и теперь надо в запросе верхний элемент оборачивать в себя?
 

MiksIr

miksir@home:~$
Да, вероятнее всего вы правы - от стиля не зависит, разница в wsdl есть небольшая и кажись именно что нужно. Пошел дергать банк дальше ;)
 
Сверху