我使用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端点。
如果有人有任何我可以使用的建议或图书馆,我会非常感激。
答案 0 :(得分:4)
自Q发布以来已经有一段时间了,但是嘿,SOAP也没有超速。我猜你已经实现了一些东西,小心分享?
无论如何,作为一种答案,我很幸运有一位客户强迫我使用他的SOAP服务(他们很棒的SOA平台不支持其他格式......)用于拉取和推送数据。我只消费,因为我自己为其他人提供了漂亮而干净的RESTful Web服务。我一直在使用savon(法语为肥皂?)取得了巨大的成功
如果你真的很懒,你就会对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服务提供程序,我还没有在rails中做过(对抗它!)并且只能祝你好运。必须自己开发愚蠢的WSDL才是SOAP服务真正的痛苦。希望这对任何人都有帮助。
答案 1 :(得分: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最适合。
答案 2 :(得分:1)
您可以将此gem用于soap实现
答案 3 :(得分:0)