代码之家  ›  专栏  ›  技术社区  ›  Anton Gogolev

真正的SOAP互操作性是一个神话吗?

  •  5
  • Anton Gogolev  · 技术社区  · 14 年前

    我是说, 真正的互操作:从Java到.NET,从PHP到Java等。

    我之所以这么问是因为我们的能力希望我们用SOAP Web服务实现面向公共的API,我正试图为支持RESTful XML/JSONAPI做一个有力的证明。

    他们的推理是由洗脑引起的:

    • SOAP是一种基于标准的协议(更不用说我们的一个开发人员在XML配置和自定义安全令牌序列化程序中花费了过去4天的时间,试图以某种方式弯曲WCF客户机,以便它调用WSE 3.0服务,并产生各种模糊的错误)。
    • SOAP是安全的(但从业务角度来说,我们不需要加密或数字签名—通过SSL的HTTP将足够多)
    • 最后,SOAP是可互操作的,这似乎是它们的最大卖点(这个问题的全部要点)。

    重申一下:SOAP真的可以互操作吗?你的真实世界的战争故事将会非常精彩。

    2 回复  |  直到 14 年前
        1
  •  3
  •   skaffman    14 年前

    只要你坚持 WS-I-based SOAP标准,那么互操作通常非常简单。WS-I旨在解决早期SOAP实现所遇到的初始互操作问题。

    当使用pre-ws-i Web服务(例如,rpc编码的东西)或使用类似wcf的高级安全扩展时,问题往往会突然出现。它们变得复杂,出错时很难调试。

        2
  •  1
  •   ryber    14 年前

    是的,大部分情况下是这样的,尽管有时这可能是一场战斗。我有许多基于标准的SOAP服务,有些语言/库似乎比其他的更容易。

    然而,在肥皂世界里,一切都不快乐。一个特别淘气的库(ApacheAxis)默认情况下会将WSDL的一个副本编译到它的存根中……这本身并不奇怪,因为.NET做了同样的事情……但问题是它也会为任何更改验证WSDL。如果检测到变化,它就会抛出。

    所以假设你有一个创建用户的方法,并且你添加了中间的初始5个月。您将中断使用axis的所有消费者的服务……即使不需要中间的首字母,并且如果您发送服务,服务可能会不太在意。因此,在我们这里,我们必须在添加任何可选参数之前几个月向客户发送消息,以便他们可以再次雇用他们的承包商,以便在发布之夜重新编译WSDL。