2

Здравствуйте, я тестирую веб-службы, и я пытаюсь написать клиент, используя SAVON с моим wsdl. У меня есть одна доступная операция с именем log_process, и я пытаюсь получить к ней доступ, но получаю ошибки. У меня есть аналогичный скрипт, написанный на PHP, и он работает нормально. Я попыталсяRuby SOAP Client, использующий SAVON, не работает, тогда как работает клиент PHP SOAP

require 'net/http' 
require "uri" 
require 'savon' 

client = Savon.client(wsdl: "http://abc.com/projects/shared/abc.wsdl") 

@a=client.operations 

puts @a 

ary={0 =>"art", 1 =>"bac", 2 =>"arr"} 

@result = client.call(:log_process, message:{0 =>"asdf", 1 =>"qwer", 2 =>"arr"}) 
puts @result 

и получить следующее сообщение об ошибке

raise_soap_and_http_errors ': (SOAP-ENV: Client) Bad Request (Савон :: SoapFault)

Мой PHP работает решение выглядит например,

$ result = $ client-> log_process (array (0 => $ user_name, 1 => $ user_pwd, 2 => $ display_type));

любая идея, каков будет рубин, эквивалентный этому, или я вызываю операцию правильно?

+0

Почему вы называете 'log_process' на результат' операций() '? Я предполагаю, что вы хотите 'client.log_process'. –

+0

попробовал это, а также попытался @result = client.call (: log_process, message: {0 => "asdf", 1 => "asg", 2 => "arr"}) –

+0

Обновлен вопрос Теперь я получаю выше ошибка, заявляющая raise_soap_and_http_errors! ': (SOAP-ENV: Client) Плохой запрос (Savon :: SOAPFault) –

ответ

1

Try:

@result = client.call(:log_process, message:["asdf", "asg", "arr"]) 

В коде PHP, вы отправляете только один параметр, его массив

+0

Я тоже пробовал это, получая 'raise_soap_and_http_errors!': (SOAP-ENV: Server) Процедура 'string' not present (Savon :: SOAPFault) –

1

Я знаю, что это поздно, но у меня был точно такой же вопрос, пытаясь установить мыльный запрос с использованием савона на мыльный сервер. Я работал с широко используемым PHP Soap-сервером. Я нашел еще одну запись, связанную с этим, и кажется, что добавление опции message_tag исправило ее.

Это происходит потому, что в моем случае WSDL ожидал functionNameRequest в XML, но Савон, как только отправка funcionName, установив message_tag в functionNameRequest на> мыло сервер смог правильно отобразить функцию, которая запрашивается.

Это был поток, который помог мне https://github.com/savonrb/savon/issues/520 Соответствующий код цитируемый ниже:

Привет, Я просто делюсь этим в случае, если это полезно.

Я использую savon 2.3.0, и я думаю, что у самоцвета были некоторые проблемы с идентификацией параметров> автоматически из моего wsdl. Я понятия не имею о SOAP, и это первый раз, когда я действительно использую его.

Я имею дело с WSDL TradeTracker в

С помощью следующего кода я получил это работает:

client = Savon.client do 
    wsdl "http://ws.tradetracker.com/soap/affiliate?wsdl" 
    namespace_identifier :ns1 
end 

credentials = { 
    customerID: 123123, 
    passphrase: "123123123" 
} 

response = client.call(:authenticate, message_tag: :authenticate, message: credentials)