肥皂?你为什么用这个
我正在使用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响应.
解决方法
自从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服务的真正痛苦.希望这有助于任何人.