【问题标题】:Implementing a SOAP 1.2 server with Rails 3使用 Rails 3 实现 SOAP 1.2 服务器
【发布时间】:2011-02-08 13:33:33
【问题描述】:

肥皂?为什么要使用它?

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

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

如果有人有任何我可以使用的建议或库,我将非常感谢。

我已经做过的事情

  • 尝试了 Ruby 中内置的 SOAP 支持。不幸的是,它似乎不支持 SOAP 1.2。
  • 查看了 WSO2,但不想在我的服务器上构建大量 Ruby 扩展来支持 SOAP。
  • 在决定我是一个懒惰的程序员之前,考虑过硬编码 xml 响应。

【问题讨论】:

  • 我遇到了同样的问题。被要求实现一个 SOAP WebService,我希望将它添加到公司的主要 Rails 应用程序中,但还没有运气。我可能会用 PHP 编写它:|
  • 让我知道您决定使用什么。 :)

标签: ruby-on-rails xml ruby soap wsdl


【解决方案1】:

你可以在这里找到你要找的东西http://aws.rubyonrails.org/

【讨论】:

  • 感谢威尔的回答。据我所知,AWS 不支持 1.2,也不支持 Rails 3(目前)。如果我弄错了,请告诉我。
【解决方案2】:

这个 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

这是使用它的一种方式

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,savon 支持它。关于实际上是一个 SOAP 服务provider,我还没有在 rails 中做过(战斗!),只能祝你好运。必须自己开发愚蠢的 WSDL 是 SOAP 服务的真正痛苦。希望这对任何人都有帮助。

【讨论】:

  • 感谢莫腾的回答。 :) 我查看了 Savon,但它是客户,因此无法帮助我。幸运的是,我已经从那个项目继续前进,最终根本不必实施肥皂端点。感谢您分享“硬编码 SOAP”结构,因为我认为对于尝试做我正在做的事情的人来说,这可能是他们最好的选择。 ~_~
【解决方案3】:

如果您无法避免在 Rails 3 中使用 SOAP,请尝试使用wash_out gem。您可以在以下位置找到它:https://github.com/roundlake/wash_out

我们在我们的系统中使用。它不是万无一失的,仍然在经历一些变化,至少你会开始

尽管从 Rails 3 开始,它们已经停止了对 SOAP 的支持——wash_out gem 可以帮助您更快地开始创建 SOAP Web 服务。任何有兴趣的人都应该看看 github 上的wash_out wiki。在我们的例子中,客户希望公开一个 SOAP Web 服务;我们尝试采用 REST 方式。最后,我们不得不对 SOAP 说“是”。我尝试了 aws、soap4r - 但结果是wash_out 最合适。

【讨论】:

    【解决方案4】:

    你可以使用这个 gem 来实现soap

    savon

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 2011-11-15
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多