3

こんにちは、私はいくつかの Web サービスをテストしており、WSDL で SAVON を使用してクライアントを作成しようとしています。log_process という名前の使用可能な操作が 1 つあり、それにアクセスしようとしていますが、エラーが発生しています。同様のスクリプトを PHP で作成しましたが、問題なく動作しています。私が試してみました

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

client = Savon.client(wsdl: "http://somedomain.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) 不正なリクエスト (Savon::SOAPFault)

私のPHP作業ソリューションは次のようになります

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

これに相当するルビーは何か、または操作を正しい方法で呼び出していますか?

4

2 に答える 2

2

私はこれが遅いことを知っていますが、PHP Soapサーバーを使用して広範囲に使用したSOAPサーバーにsavonを使用してSOAPリクエストを設定しようとして、まったく同じ問題を抱えていました。これに関連する別の投稿を見つけましたが、message_tagオプションを追加すると修正されたようです。

これは、私の場合、WSDL がfunctionNameRequestxml で期待されていたためです。ただし、savonは >soap サーバーにfuncionName 設定message_tagfunctionNameRequestて送信するだけで、要求されている機能を正しくマップできました。

これは私を助けてくれたスレッドでした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)
于 2014-11-03T04:54:24.903 に答える