我正在尝试将rails应用程序与WCF服务集成。我已经尝试过soap4r和Savon没有爱情。据我所知,没有一个Ruby库支持最新版本的SOAP。
我得到的错误是:
无法处理邮件,因为 内容类型'text / xml; charset = UTF-8' 不是预期的类型 “应用程序/肥皂+ xml的;字符集= utf-8' 的应用/肥皂+ xml的。';字符集= UTF-8' 。
我设法通过将WCF服务绑定从wsHttpBinding更改为basicHttpBinding来击败此错误,但随后收到了新错误:
由于EndpointDispatcher上的ContractFilter不匹配,无法在接收方处理带有Action''的消息。这可能是由于合同不匹配(发送方与接收方之间的操作不匹配)或发送方与接收方之间的绑定/安全性不匹配。检查发件人和收件人是否具有相同的合同和相同的绑定(包括安全要求,例如消息,传输,无)。 (SOAP :: FaultError)
现在,这个错误让我感到困惑,因为我没有看到任何方法在任何Ruby库中配置端点。有谁知道吗?
有没有人成功通过Ruby调用WCF服务?'application / soap + xml;字符集= UTF-8' 。
答案 0 :(得分:3)
请注意我的工作正常......在我将服务的web.config更改为basicHttpBinding之后,Savon能够发送和接收消息。只有soap4r无法静止并抛出Action''错误。
答案 1 :(得分:1)
这可能不是你想听到的但是我最近在Ruby中与SOAP进行交互......它根本不是很有趣,没有一个可用的宝石是完整的,稳定的或有良好的记录,而且似乎都掉了当你添加一点点复杂性时(传递包含一些值的对象而不是传递一个整数或字符串)。
我最终嗅探了.net客户端发出的请求,然后构建了具有.to_xml方法的对象,获取了XML Builder对象并添加了自己的东西..
负责处理请求,然后自定义每个服务请求方法以提取结果所需的信息。
非常手动的方式,并且必须为我需要使用的每种方法添加更多,但至少它可以工作!
我工作的其他一些人使用JRuby和Axis取得了成功。我不想这样做,因为我想要一个纯粹的Ruby解决方案。
抱歉,我无法提供更多帮助..如果您希望我发布我的代码来构建肥皂请求......
答案 2 :(得分:1)
我在使用WCF Web服务时遇到了与Savon相同的问题。内容错误是因为您的服务期望SOAP 1.2,但默认情况下,Savon将请求作为SOAP 1.1发送。
1.1的Content-Type值是'text / xml; charset = UTF-8',但如果服务器配置为1.2(wsHttpBinding是什么),Content-Type必须是'application / soap + XML;字符集= UTF-8' 。
我在Savon website上找到了这个方法:
response = client.request :get_user do
soap.version = 2
end