2016-04-21 11 views
0

Ich versuche, eine Verbindung zu einem Remote-SOAP-Dienst herzustellen, der mit der PHP NuSoap-Bibliothek eingerichtet wurde. Ich verbinde mich mit einem Ruby Savon Client.Verbinden mit PHP NuSOAP Server mit Ruby Savon Client

Dienst des WDSL Besuchsadresse (http://example.com/api/webservice.php?wdsl) gibt die folgenden Informationen über den Endpunkt zu verwenden Ich versuche:

Name: addsubscription 
    Binding: webserviceBinding 
    Endpoint: http://www.example.com/api/webservice.php 
    SoapAction: http://www.example.com/api/webservice.php/addsubscription 
    Style: rpc 
    Input: 
    use: encoded 
    namespace: 
    encodingStyle: http://schemas.xmlsoap.org/soap/encoding/ 
    message: addsubscriptionRequest 
    parts: 
    Output: 
    use: encoded 
    namespace: 
    encodingStyle: http://schemas.xmlsoap.org/soap/encoding/ 
    message: addsubscriptionResponse 
    parts: 
    Namespace: 
    Transport: http://schemas.xmlsoap.org/soap/http 
    Documentation: 

Einstellung meiner Savon-Client wie so hoch:

client = Savon::Client.new(wsdl: "http://www.example.com/api/webservice.php?wdsl") 

und dann versuchen, das 'Abonnement hinzufügen' Methode aufzurufen:

response = client.call(:addsubscription) do 
    message my_hash_of_stuff 
end 

gi - ves die folgenden Fehler in den Protokollen

Savon::UnknownOperationError: Unable to find SOAP operation: :addsubscription 
Operations provided by your service: [] 

den Client wie so einrichten:

client = Savon.client do 
    endpoint "http://www.example.com/api/webservice.php" 
    namespace '' 
end 

und dann wie oben den gleichen Anruf laufen wirft einen Savon :: SOAPFault Fehler, die Ich gehe davon aus, würde aufgrund des Fehlens eines Namespace-Attributs sein (Ich bin mir nicht sicher, wie Informationen weiter von diesem Fehler zu debuggen/zu lesen)?

Basierend auf den obigen Informationen, wie sollte ich den Savon Client konfigurieren, um eine Verbindung zu diesem Dienst herzustellen?

Edit:

Einstellen der Client wie so nach oben -

client = Savon.client(namespace: '', endpoint: 'http://www.example.com/api/webservice.php') 

und dann (mit einem bevölkerten message_hash var) Aufruf

response = client.call(:addsubscription, 
        message: message_hash) 

spuckt den folgenden Fehler:

Savon::SOAPFault: /app/vendor/bundle/ruby/2.2.0/gems/nori-2.6.0/lib/nori.rb:72:in `find_value': undefined method `each' for nil:NilClass (NoMethodError) 
from /app/vendor/bundle/ruby/2.2.0/gems/nori-2.6.0/lib/nori.rb:38:in `find' 
from /app/vendor/bundle/ruby/2.2.0/gems/savon-2.11.1/lib/savon/soap_fault.rb:24:in `to_s' 
from /app/vendor/ruby-2.2.3/lib/ruby/2.2.0/irb.rb:498:in `write' 
from /app/vendor/ruby-2.2.3/lib/ruby/2.2.0/irb.rb:498:in `print' 
from /app/vendor/ruby-2.2.3/lib/ruby/2.2.0/irb.rb:498:in `block (2 levels) in eval_input' 
from /app/vendor/ruby-2.2.3/lib/ruby/2.2.0/irb.rb:623:in `signal_status' 
from /app/vendor/ruby-2.2.3/lib/ruby/2.2.0/irb.rb:486:in `block in eval_input' 
from /app/vendor/ruby-2.2.3/lib/ruby/2.2.0/irb/ruby-lex.rb:245:in `block (2 levels) in each_top_level_statement' 
from /app/vendor/ruby-2.2.3/lib/ruby/2.2.0/irb/ruby-lex.rb:231:in `loop' 
from /app/vendor/ruby-2.2.3/lib/ruby/2.2.0/irb/ruby-lex.rb:231:in `block in each_top_level_statement' 
from /app/vendor/ruby-2.2.3/lib/ruby/2.2.0/irb/ruby-lex.rb:230:in `catch' 
from /app/vendor/ruby-2.2.3/lib/ruby/2.2.0/irb/ruby-lex.rb:230:in `each_top_level_statement' 
from /app/vendor/ruby-2.2.3/lib/ruby/2.2.0/irb.rb:485:in `eval_input' 
from /app/vendor/ruby-2.2.3/lib/ruby/2.2.0/irb.rb:395:in `block in start' 
from /app/vendor/ruby-2.2.3/lib/ruby/2.2.0/irb.rb:394:in `catch' 
from /app/vendor/ruby-2.2.3/lib/ruby/2.2.0/irb.rb:394:in `start' 
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/commands/console.rb:110:in `start' 
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/commands/console.rb:9:in `start' 
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:68:in `console' 
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:39:in `run_command!' 
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/commands.rb:17:in `<top (required)>' 
from /app/bin/rails:4:in `require' 
from /app/bin/rails:4:in `<main>' 
+0

nahm ich an, du bist nicht wirklich * * Aufruf 'http: //www.example.com/api/webservice.php wdsl', tun Sie ? Das ist nur dein Platzhalter? –

+0

Außerdem: Wenn Sie die Anmeldung in Ihrem Savon-Client einschalten, erhalten Sie möglicherweise bessere Informationen darüber, was schief läuft. Wie sieht die WSDL aus? Was Sie gepostet haben, ist keine WSDL, sondern ein anderes Pseudocode-Dokument (?). Ich habe gerade bemerkt, dass es im Dokument einen 'style: rpc' gibt, der darauf hinweist, dass es nicht SOAP ist ?? –

Antwort

0

Es sieht so aus, als ob Sie auf einer veralteten Savon-Version < 2.x. Ich empfehle ein Upgrade auf Version 2.x (2.11.1, während ich schreibe). Mit der Einführung von v2 hat sich die Oberfläche stark verändert.

Eine minimale Implementierung könnte wie folgt aussehen:

require 'savon' 

WSDL = 'http://www.example.com/api/webservice.php?wdsl' 

client = Savon.client(wsdl: WSDL, 
         log: true, 
         log_level: :debug, 
         pretty_print_xml: true) 
response = client.call(:addsubscription, 
         message: my_hash_of_stuff) 
print response.to_hash 
+0

Danke für die Vorschläge, ich habe 2.11.1 im Einsatz nach meinem Gemfile.lock und ich ziehe meine Informationen aus der Dokumentation hier - http://savonrb.com/version2/client.html - Ich habe aktualisiert die Frage mit einigen weiteren Informationen, obwohl – user2013350

+0

Irgendwelche Neuigkeiten dazu? –