Ruby on rails 用Rails 3实现SOAP 1.2服务器 肥皂?你为什么要用这个?
我正在使用Ruby Enterprise Edition和Rails 3编写我的web应用程序。该应用程序使用Ustream的分水岭白标广播服务为我的用户提供实时流媒体。不幸的是,我在开发过程中遇到了一个障碍。流域允许应用程序通过在应用程序端实现SOAP服务来提供自己的身份验证层。此身份验证层必须在SOAP 1.2中实现,才能使用Waterwater。令我非常沮丧的是,Ruby社区似乎已经超越了古老的SOAP,走向了一个充满休息和独角兽的光明未来 这让我99.9%的时间都很开心。然而,现在我需要在我崭新的Rails 3应用程序中创建一个SOAP 1.2端点 如果任何人有任何建议或图书馆,我可以使用,我将非常感谢 我已经做过的事情Ruby on rails 用Rails 3实现SOAP 1.2服务器 肥皂?你为什么要用这个?,ruby-on-rails,xml,ruby,soap,wsdl,Ruby On Rails,Xml,Ruby,Soap,Wsdl,我正在使用Ruby Enterprise Edition和Rails 3编写我的web应用程序。该应用程序使用Ustream的分水岭白标广播服务为我的用户提供实时流媒体。不幸的是,我在开发过程中遇到了一个障碍。流域允许应用程序通过在应用程序端实现SOAP服务来提供自己的身份验证层。此身份验证层必须在SOAP 1.2中实现,才能使用Waterwater。令我非常沮丧的是,Ruby社区似乎已经超越了古老的SOAP,走向了一个充满休息和独角兽的光明未来 这让我99.9%的时间都很开心。然而,现在我需要
- 尝试了Ruby中的内置SOAP支持。不幸的是,它似乎不支持SOAP1.2
- 查看了WSO2,但不想在我的服务器上构建一组广泛的Ruby扩展来支持SOAP
- 在决定我是一个懒惰的程序员之前,先考虑硬编码xml响应
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
关于SOAP 1.2,savon支持它。关于实际上是一个SOAP服务提供商,我还没有在rails中做到这一点(与之抗争!),我只能祝你好运。必须自己开发愚蠢的wsdl才是SOAP服务的真正痛苦。希望这对任何人都有帮助。如果您无法避免Rails 3中的SOAP,请尝试清洗gem。您可以在以下网址找到: 我们在我们的系统中使用了。它不是傻瓜式的,并且仍在经历一些变化,至少你会开始
尽管Rails 3已经停止支持SOAP,但它可以帮助您更快地开始创建SOAP Web服务。任何感兴趣的人都应该看看github上的wash_out wiki。在我们的例子中,客户希望一个SOAP Web服务被公开;我们试着走剩下的路。最后,我们不得不对SOAP说“是”。我试过aws、soap4r,但结果证明wash_是最合适的。您可以将此gem用于soap实现
谢谢你的回答。据我所知,AWS不支持1.2,也不支持Rails 3(目前)。如果我错了,请告诉我。我也有同样的问题。我被要求实现一个soapwebservice,我希望将它添加到公司的mainrails应用程序中,但还没有成功。我可能会用PHP编写:|让我知道你决定使用什么。:)谢谢你的回答(莫顿)我看了Savon,但它是一个客户,因此不能帮助我。幸运的是,我已经离开了那个项目,最终根本不需要实现soap端点。感谢您分享“硬编码SOAP”结构,因为我认为对于试图做我正在做的事情的人来说,这可能是他们最好的选择~_~
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