2013-07-18 219 views
2

您好,我測試Web服務,我正在嘗試使用我的wsdl編寫一個使用SAVON的客戶端。我有一個名爲log_process的可用操作,我試圖訪問它,但得到錯誤。我有用PHP編寫的類似腳本,它工作正常。我曾嘗試使用SAVON的Ruby SOAP客戶端不工作,而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:客戶端)錯誤的請求(薩翁::的SOAPFault)

我的PHP工作液外觀這樣

$結果= $客戶機 - > log_process(陣列(0 => $ USER_NAME,1 => $ user_pwd,2 => $ display_type));

任何想法什麼將是相當於這個ruby或我是否以正確的方式調用操作?

+0

你爲什麼叫'上)'操作的結果('log_process'?我猜你想要'client.log_process'。 –

+0

嘗試過,以及嘗試@result = client.call(:log_process,消息:{0 =>「asdf」,1 =>「asg」,2 =>「arr」}) –

+0

更新了問題現在我得到(SOAP-ENV:客戶端)錯誤的請求(Savon :: SOAPFault) –

回答

1

嘗試:

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

在PHP代碼,你只發送1參數,其陣列

+0

我試過這個以及獲得'raise_soap_and_http_errors!':(SOAP-ENV:Server)過程'字符串'不存在(Savon :: SOAPFault)錯誤 –

1

我知道這是晚了,但我在試圖建立完全相同的問題使用savon到肥皂服務器的肥皂請求我已經廣泛使用PHP肥皂服務器進行過工作。我發現另一個帖子與此有關,並且似乎添加了message_tag選項修復了它。

這是因爲在我的情況下,WSDL是在XML期待functionNameRequest,但薩翁因爲只有通過設置message_tagfunctionNameRequest發送funcionName> SOAP服務器能夠正確地映射正在請求的功能。

這是線程幫助我引用如下https://github.com/savonrb/savon/issues/520相關代碼:

嗨, 我只是分享此情況下,它是非常有用的。

我使用的是savon 2.3.0,我猜gem有一些問題,從我的wsdl中自動識別參數。我不知道SOAP,這是我第一次使用它。

我處理TradeTracker的WSDL

用下面的代碼我得到它的工作:

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)