Rails v1.2.3, ActionWebService и платформа .NET в качестве клиента - PullRequest
0 голосов
/ 18 июня 2009

Я использую Rails 1.2.3 для проекта. (Обновление рельсов не вариант). Я создал простой тестовый веб-сервис с использованием Rails. Я тестировал с помощью Rails вызывать скаффолд. Это, кажется, генерирует ответ без проблем.

Я пытаюсь настроить клиента через .NET. Я создал проект ASP.NET Web App в C #. Я добавляю «Web Reference», добавляю URL ссылки в поле URL мастера,

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

тогда я получаю сообщение об ошибке от мастера:

Произошла ошибка при загрузке «http://mydomain.com:3000/backend/api' Запрос не выполнен с ошибкой сообщение:

GET не поддерживается

Произошла ошибка при загрузке «http://mydomain.com:3000/backend/api/$metadata' Запрос не выполнен с ошибкой сообщение:

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?

1 Ответ

0 голосов
/ 17 ноября 2010

На этот вопрос, вероятно, ответили и в других местах, но поскольку этот вопрос всплывает при поиске в 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-запрос, чем получать его. Или вы должны переопределить обработку запросов GET в AWS. (Вы можете попробовать отредактировать код внутри гема, но (1) он будет перезаписан при обновлении гема и (2) я не уверен, насколько хороша идея, которая в целом, и (3) я никогда не пробовал это.

Первый вариант, скорее всего, более уместен, если вы контролируете код, генерирующий запрос. Если нет, то у Zack Chandler был обходной путь (для подключения QuickBooks к веб-сервису, но он должен работать в любом случае), здесь .

Я цитирую это ниже в случае изменения 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, но вы должны понять это.

Надеюсь, это поможет, и я надеюсь, Зак не возражает против того, чтобы я делал репост.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...