【问题标题】:Rails v1.2.3, ActionWebService and .NET platform as clientRails v1.2.3,ActionWebService 和 .NET 平台作为客户端
【发布时间】:2010-11-18 03:28:35
【问题描述】:

我在一个项目中使用 Rails 1.2.3。 (升级导轨不是一种选择)。 我使用 Rails 创建了一个简单的测试 Web 服务。我已经使用 Rails 调用脚手架进行了测试。它似乎可以毫无问题地生成响应。

我正在尝试通过 .NET 设置客户端。我在 C# 中创建了一个 ASP.NET Web App 项目。我正在添加“Web 参考”,将参考 URL 添加到向导的 URL 字段中,

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

然后我收到来自向导的错误:

下载时出错 'http://mydomain.com:3000/backend/api' 请求失败并出现错误 留言:

不支持获取

下载时出错 'http://mydomain.com:3000/backend/api/$元数据' 请求失败并出现错误 留言:

不支持获取

我的代码是:

# 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 网络服务是否正确?

【问题讨论】:

    标签: .net ruby-on-rails web-services


    【解决方案1】:

    这可能已经在其他地方得到了回答,但是由于在谷歌搜索 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

    我在下面引用它以防 url 发生变化。

    在 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 特有的,但您应该明白这一点。

    希望这会有所帮助,我希望 Zack 不介意我转发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 2010-10-09
      相关资源
      最近更新 更多