2009-06-17 6 views
0

J'utilise Rails 1.2.3 sur un projet. (La mise à niveau des rails n'est pas une option). J'ai créé un service web de test simple en utilisant Rails. J'ai testé en utilisant l'échafaudage invoque Rails. Il semble générer la réponse sans problèmes. Je tente d'installer un client via .NET. J'ai créé un projet ASP.NET Web App en C#. J'ajoute un « Web de référence », d'ajouter l'URL de référence dans le champ URL de l'assistant,Rails v1.2.3, ActionWebService et plate-forme .NET en tant que client

http://mydomain.com:3000/backend/api 

je reçois une erreur de l'assistant:

Il y a eu une erreur pendant le téléchargement ' http://mydomain.com:3000/backend/api ' la demande a échoué avec l'erreur message:

sont pas pris en charge

Il wa est une erreur du téléchargement 'http://mydomain.com:3000/backend/api/ $ metadata' La demande a échoué avec le message d'erreur :

sont pas pris en charge

Mon code est:

# in app/apis/address_api.rb 
class AddressApi < ActionWebService::API::Base 
    api_method :gettest, :returns => [:string] 
end 

# in app/controllers/backend_controller 
class BackendController < ApplicationController 
    wsdl_service_name 'Backend' 
    web_service_api AddressApi 
    web_service_scaffold :invoke 

    def gettest 
    return "hello" 
    end 

end 

Existe-t-il des problèmes connus entre ActionWebService et .NET ou suis-je en train de faire quelque chose de mal? Mon URL est-elle correcte pour un service Web sur rails?

Répondre

0

Cela a probablement été répondu ailleurs, mais puisque cette question apparaît lors de la recherche google pour actionwebservice et obtenir des demandes, je pensais que je répondrais ici.

Par défaut, AWS refuse les demandes non-POST. Plus précisément, il a du code action_controller_dispatcher.rb qui lit:

def dispatch_web_service_request 
    if request.get? 
    render_text('GET not supported', '500 GET not supported') 
    return 
    end 
    .. 

Fondamentalement, vous devez soit mettre en place la demande à la demande POST au lieu de l'obtenir. Ou vous devez remplacer la gestion AWS des demandes GET. (Vous pourriez essayer d'éditer le code dans la gemme, mais (1) cela sera écrasé quand vous mettez à jour la gemme et (2) je ne suis pas sûr de la qualité d'une idée en général et (3) je n'ai jamais essayé Le premier est probablement plus approprié si vous avez le contrôle du code générant la requête, sinon, Zack Chandler avait une solution de contournement (pour la connexion de QuickBooks à un service Web, mais cela devrait fonctionner dans n'importe quel cas). cas), here.

Je cite ci-dessous dans le cas où l'URL change.

Créer un fichier patch dans lib/action_web_service_ext.rb

module ActionController 
    class Base 

    alias_method :old_dispatch_web_service_request, :dispatch_web_service_request 

    # --- [ QBWC requests the api url with a GET request upon loading the QWC file for the first time ] --- 
    def dispatch_web_service_request 
     render :nothing => true and return if request.get? 
     old_dispatch_web_service_request 
    end 
    end 
end 

Active le patch dans config/environment.rb

require 'action_web_service_ext.rb' 

Il est évident que le code dans la méthode dispatch_web_service_request est QuickBooks spécifique, mais vous devriez avoir l'idée.

J'espère que cela aide, et j'espère que Zack ne me dérange pas de me reposer.

Questions connexes