这是一个开放式问题和相当多的文字,但请继续关注我。
首先介绍一点背景。去年我一直在编写 Web 服务。我从这个领域的零知识开始。我的工作是准备 WSDL(我可以按照自己的意愿构建它)并实施它。我对 XSD Schema 的准备方式有一点影响,但影响不大。我参加了2个项目。第一个只有大约 5 个 Web 服务,而第二个有 20 多个并且还在增长。两者都经过不断的 XSD 架构修改。
现在说到重点。
就我如何构建 WSDL 设计而言,我决定在每种方法中使用两种不同的方法。在第一个项目中,我在 WSDL 之间分离了 WS,每个 WSDL 一个 WS。这工作得很好,特别是因为每个操作使用的 XSD 模式都是不同的(除了一个很少更改的基本模式)。但是,您确实有 5 种不同的 WSDL,这对我来说似乎很浪费。
第二个项目有更多的 WS 和更多数量和更复杂的模式。在这里,我决定根据它们的用途将服务分成几个 WSDL。一切似乎都很好,直到我意识到(我缺乏知识)当调用 WS 时,它们的身体主要元素会被识别(实际上我仍然不知道为什么会这样)。我们的许多 WS 具有与输入相同的元素,并且由于它们位于相同的 WSDL 中,因此它们具有相同的路径。这导致来自应用程序服务器(Weblogic 10.3)的警告,但它起作用了。我猜它使用了 SOAPAction 标头,因为我们使用的是 SOAP 1.1。当我们在企业总线 (OSB) 上部署服务时出现了一个问题。除非选择 SOAPAction 作为选择算法,否则它将不起作用,或者像我们的 oracle 顾问建议的那样,为每个 WS 创建一个额外的唯一元素。
这就是问题所在。如何构建 WSDL。我考虑的选项是:
- 选择 SOAPAction 标头作为选择算法。我个人喜欢这个解决方案,但由于 SOAP 1.2 不再具有它,因此(我的老板)的权力告诉我我们不能使用它。我知道 SOAP 1.2 将有一个可选的“动作”标头,但由于它是可选的,我再次不能使用它(老板推理:可能根本不在下一个版本中,客户可能不想使用可选功能,因为它是额外的成本,我不知道,这是一个商业问题)。
- 为每个 WS 使用独特的元素。这看起来丑陋且不必要,但它是我们迄今为止最好的。
- 回到之前的设置并为每个 WSDL 做一个 WS。这绝对是最不受欢迎的方法。感觉不对,从我读到的内容来看,这只是糟糕的设计。但它有效并且提供了相当多的灵活性。
现在,如果有人有任何其他解决方案,我很想听听他们,因为这让我在上个月左右感到难过。我只是找不到感觉正确的解决方案。
提前致谢。