使用Rails 3实现SOAP 1.2服务器

Car*_*rre 12 ruby xml soap wsdl ruby-on-rails

肥皂?你为什么要用它?

我正在使用Ruby Enterprise Edition和Rails 3来编写我的Web应用程序.该应用程序使用Ustream的Watershed白标广播服务为我的用户提供实时流媒体.不幸的是,我在开发期间遇到了障碍.Watershed允许应用程序通过在应用程序端实现SOAP服务来提供自己的身份验证层.必须在SOAP 1.2中实现此身份验证层才能与Watershed一起使用.令我非常沮丧的是,似乎Ruby社区已经过去了,因为SOAP已经过了一个充满REST和Unicorns的更光明的未来.

这让我很高兴99.9%的时间.但是现在我需要在我的闪亮的新Rails 3应用程序中创建一个SOAP 1.2端点.

如果有人有我可以使用的任何建议或图书馆,我将非常感激.

我已经做过的事情

  • 尝试使用Ruby内置的SOAP支持.不幸的是,它似乎不支持SOAP 1.2.
  • 看看WSO2但是我不想在我的服务器上构建一组广泛的Ruby扩展来支持SOAP.
  • 在决定我是一个懒惰的程序员之前,考虑对xml响应进行硬编码.

oma*_*oma 5

自从发布这个 Q 已经有一段时间了,但是嘿,SOAP 也没有加速。我想你已经实现了一些东西,愿意分享吗?

无论如何,作为一种答案,我很幸运有一个客户强迫我使用他的 SOAP 服务(他们很棒的 SOA 平台不支持其他格式......)用于拉取和推送数据。我只消费,因为我自己为其他人提供了漂亮和干净的 RESTful Web 服务。我一直在使用 savon(法国肥皂?)取得了巨大成功

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
Run Code Online (Sandbox Code Playgroud)

这是使用它的一种方式

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 
Run Code Online (Sandbox Code Playgroud)

关于 SOAP 1.2,savon 支持它。关于实际上是一个 SOAP 服务提供者,我还没有在 Rails 中做过(打它!),只能祝你好运。必须自己开发愚蠢的 WSDL 才是使用 SOAP 服务的真正痛苦。希望这可以帮助任何人。


Wil*_*ill 0

您可以在这里找到您想要的内容http://aws.rubyonrails.org/