2009-03-10 11 views
0

Ich erhalte eine Fehlermeldung, wenn eine Web-Service über SeifeRails Web Service SOAP-Client

soap_client = SOAP::WSDLDriverFactory.new("http://api.upsidewireless.com/soap/Authentication.asmx?WSDL") 
driver = soap_client.createDriver 
@p = driver.GetParameters(:username => 'uname', :password => 'pword') #ERROR => wrong number of arguments (1 for 2) 

ich klar zuzugreifen versuchen, können zwei Argumente für diesen Methodenaufruf zu sehen. Warum sollte ich diesen Fehler bekommen?

Antwort

2

WSDLDriver ist veraltet (wird von createDriver aufgerufen). Sie sollten 'create_rpc_driver' verwenden. Ich erhalte aus diesem Beispiel eine Antwort mit dieser Methode. Gibt es einen Grund, 'create_rpc_driver' nicht zu verwenden?

+0

Nein gab es keinen besonderen Grund. Ich denke, ich arbeitete an einem älteren Beispiel. Deine Lösung funktioniert. Danke – stellard

4

@james hat die richtige Antwort, aber nur für die Zukunft (und weil das hat mich vor gebissen), diesen Aufruf:

driver.GetParameters(:username => 'uname', :password => 'pword') 

ist vorbei einen Parameter: ein Hash. Jedes deiner Elemente ist nicht eine Sache; Es ist ein Hash-Element mit einem Schlüssel und einem Wert. Ruby bemerkt dies und setzt sie alle in einen Hash. So übergeben Sie effektiv dies:

Dies ist eine der verwirrenden Dinge über das Aufrufen einer Methode in Ruby. Wenn Sie einen Hash als letzten (oder einzigen) Parameter übergeben, können Sie die {} auslassen, und die meisten Leute tun dies. Macht es manchmal schwer zu verstehen.

Wenn Sie tatsächlich diese zwei Parameter übergeben wollte:

driver.GetParameters('uname', 'pword') 
+0

Danke, das ist sehr nützlich. Ich habe mich gefragt, warum ich einige Fehlermeldungen für 1 für 2 Argumente erhalten würde. – Tilendor