2009-06-17 42 views
0

我在一個項目上使用Rails 1.2.3。 (升級導軌不是一種選擇)。 我使用Rails創建了一個簡單的測試Web服務。我測試過使用Rails調用腳手架。它似乎產生了沒有問題的反應。Rails v1.2.3,ActionWebService和.NET平臺作爲客戶端

我想通過.NET建立一個客戶端。我在C#中創建了一個ASP.NET Web App項目。我加入了「Web引用」,添加參考網址到嚮導的URL字段,

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

然後我收到一個錯誤從嚮導:

時出錯下載 「 http://mydomain.com:3000/backend/api「 請求失敗,錯誤 消息:

GET不支持

有WA S上的錯誤下載 '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或者我做錯了什麼?我的網址對於網絡服務是否正確?

回答

0

這可能已經在其他地方得到了解答,但是因爲在google搜索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請求,而不是得到它的請求。或者您必須重寫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的具體,但你應該明白我的意思。

希望這會有所幫助,我希望扎克不介意我轉貼。