3

我正在尝试将 rails 应用程序与 WCF 服务集成。我已经尝试过soap4r 和Savon,完全没有爱。据我所知,没有一个 Ruby 库支持最新版本的 SOAP。

我得到的错误是:

无法处理消息,因为内容类型 'text/xml;charset=UTF-8' 不是预期的类型 'application/soap+xml; charset=utf-8'.'应用程序/soap+xml; 字符集=utf-8'。

我设法通过将 WCF 服务绑定从 wsHttpBinding 更改为 basicHttpBinding 来克服此错误,但随后收到了新错误:

由于 EndpointDispatcher 的 ContractFilter 不匹配,接收方无法处理带有 Action '' 的消息。这可能是因为合约不匹配(发送方和接收方之间的操作不匹配)或发送方和接收方之间的绑定/安全不匹配。检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息、传输、无)。(SOAP::FaultError)

现在,这个错误让我感到困惑,因为我看不到任何在任何 Ruby 库中配置端点的方法。有人知道吗?

有没有人成功地从 Ruby 调用 WCF 服务?'application/soap+xml; 字符集=utf-8'。

4

3 回答 3

3

请注意,我得到了这个工作......在我将服务的 web.config 更改为 basicHttpBinding 后,Savon 能够发送和接收消息。只有soap4r 无法静止并抛出 Action '' 错误。

于 2010-08-31T19:35:58.580 回答
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 网站上找到了这种方法:

response = client.request :get_user do
  soap.version = 2
end
于 2012-10-08T15:30:33.837 回答
1

这可能不是你想听到的,但我最近一直在与 Ruby 中的 SOAP 进行交互......这一点都不好玩,没有一个可用的 gem 是完整的、稳定的或有据可查的,而且当你添加一点点复杂性(传递一个包含一些值的对象,而不是仅仅传递一个整数或字符串)。

我最终嗅探了 .net 客户端发出的请求,然后构建具有 .to_xml 方法的对象,获取 XML Builder 对象并添加它自己的东西..

这会处理请求,然后定制每个服务请求方法以提取结果所需的信息。

非常手动的方法,并且必须为我需要使用的每种方法添加更多,但至少它有效!

与我一起工作的其他一些人使用 JRuby 和 Axis 取得了成功。我远离这个,因为我想要一个纯 Ruby 解决方案。

抱歉,我无法提供更多帮助。如果您愿意,我会发布我的代码来构建肥皂请求...

于 2010-08-22T10:40:15.100 回答