Подтвердить что ты не робот

Внедрение сервера SOAP 1.2 с Rails 3

SOAP? Зачем вам это использовать?

Я использую Ruby Enterprise Edition и Rails 3 для написания своего веб-приложения. Приложение использует службы радиовещания белого лейбла Ustream Watershed для обеспечения прямой трансляции для моих пользователей. К сожалению, я врезался во время разработки. Watershed позволяет приложению предоставлять свой собственный уровень аутентификации через реализацию SOAP-сервиса на стороне приложения. Этот уровень аутентификации должен быть реализован в SOAP 1.2 для работы с Watershed. К моему большому разочарованию, похоже, что сообщество Ruby перешло в прошлое ye'old SOAP к более светлому будущему, заполненному REST и Unicorns.

Это делает меня счастливым 99,9% времени. Однако сейчас мне нужно сделать конечную точку SOAP 1.2 в моем блестящем новом приложении Rails 3.

Если у кого-то есть предложения или библиотеки, которые я могу использовать, я был бы очень благодарен.

Вещи, которые я уже сделал

  • Пробовал встроенную поддержку SOAP в Ruby. К сожалению, похоже, что он не поддерживает SOAP 1.2.
  • Посмотрел на WSO2, но не хотел создавать обширный набор Ruby-расширений на моем сервере, чтобы поддерживать SOAP.
  • Мысль о жестком кодировании ответов xml, прежде чем решить, что я ленивый программист.
4b9b3361

Ответ 1

Прошло некоторое время с тех пор, как этот Q был опубликован, но эй, SOAP также не ускользает. Наверное, вы что-то внедрили, поделитесь ими?

В любом случае, как своего рода ответ, я был благословлен тем, что клиент заставлял меня потреблять его SOAP-сервисы (их потрясающая платформа SOA не поддерживает другие форматы...) как для вытягивания, так и для подталкивания данных. Я только потребляю, поскольку я предоставляю хорошие и чистые веб-службы RESTful для других. Я использую савон (французский для мыла?) С большим успехом

http://savonrb.com

Если вы действительно ленивы, вы будете жестко закодировать структуру конверта SOAP и ввести свои динамические данные. Вот простой пример.

def soap_envelope(pCode)
  "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:prod='http://xmlns.aBigCompany.com/path/to/NeededService'>
     <soapenv:Header/>
     <soapenv:Body>
        <something:NeededServiceRequest>
           <something:productCode>#{pCode}</something:productCode>
        </something:NeededServiceRequest>
     </soapenv:Body>
  </soapenv:Envelope>"
end

И это один из способов его использования

products_wsdl = Savon::Client.new "http://ipAtBigCo:xxxx/path/to/services/NeededService?wsdl"
begin
  response = products_wsdl.process! do |soap| 
    soap.xml = soap_envelope("someProductCode")
  end
rescue => e
  MyLogger.error "Error: SOAP call for code #{pCode} failed. ++"
  raise e
end
response.to_hash # This is the nice part 

О SOAP 1.2, савон поддерживает его. Фактически я являюсь поставщиком услуг SOAP, я не делал этого в рельсах (сражайтесь!) И может только пожелать вам удачи. Необходимость разработки глупых WSDL - это настоящая боль при использовании SOAP-сервисов. Надеюсь, это поможет кому-то.

Ответ 2

Если вы не можете избежать SOAP в Rails 3, попробуйте стирать wash_out. Вы можете найти его по адресу: https://github.com/roundlake/wash_out

Мы использовали в нашей системе. Это не безупречно и все еще претерпевает некоторые изменения, по крайней мере, вы начнете

Хотя Rails 3 и далее, они перестали поддерживать SOAP - стирание wash_out поможет вам начать работу с веб-сервисом SOAP быстрее. Любой, кто заинтересован, должен посмотреть на wiki wiki на github. В нашем случае клиент хотел, чтобы веб-сервис SOAP был открыт; мы попытались пройти путь REST. В конце концов, мы должны были сказать "да" SOAP. Я попробовал aws, soap4r - но wash_out оказался наилучшим образом.

Ответ 3

Вы можете использовать этот камень для реализации мыла

savon