我正在项目中使用Rails 1.2.3。 (升级rails不是一种选择)。 我使用Rails创建了一个简单的测试Web服务。我已经使用Rails调用脚手架进行了测试。它似乎产生了没有问题的响应。
我正在尝试通过.NET设置客户端。我在C#中创建了一个ASP.NET Web App项目。我正在添加“Web引用”,将引用URL添加到向导的URL字段中,
http://mydomain.com:3000/backend/api
然后我收到了向导的错误:
下载时出错 'http://mydomain.com:3000/backend/api' 请求因错误而失败 消息:
不支持GET
下载时出错 'http://mydomain.com:3000/backend/api/ $的元数据' 请求因错误而失败 消息:
不支持GET
我的代码是:
# 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
ActionWebService和.NET之间是否存在任何已知问题,或者我做错了什么?我的URL是否适用于rails web服务?
答案 0 :(得分:0)
这可能已在其他地方得到解答,但由于在搜索google for actionwebservice并获取请求时弹出此问题,我想我会在这里回答。
默认情况下,AWS拒绝非POST请求。具体来说,它在action_controller_dispatcher.rb中的代码为:
def dispatch_web_service_request
if request.get?
render_text('GET not supported', '500 GET not supported')
return
end
..
基本上,您必须设置POST请求的请求,而不是GET。或者您必须覆盖AWS对GET请求的处理。 (您可能会尝试编辑gem中的代码,但是(1)在更新gem时会被覆盖;(2)我不确定一般的想法有多好(3)我从未尝试过它
如果您控制生成请求的代码,前者可能更合适。如果不这样做,Zack Chandler有一个解决方法(对于QuickBooks与Web服务的连接,但它应该适用于任何情况),here。
如果网址发生变化,我会在下面引用它。
在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
在config / environment.rb中启用补丁
require 'action_web_service_ext.rb'
显然,dispatch_web_service_request方法中的代码是特定于QuickBooks的,但你应该明白这一点。
希望这会有所帮助,我希望扎克不介意我重新发布。