将 ColdFusion 生成的 WSDL Web 服务从 RPC 编码更改为文档文字会有啥影响?

Posted

技术标签:

【中文标题】将 ColdFusion 生成的 WSDL Web 服务从 RPC 编码更改为文档文字会有啥影响?【英文标题】:What are the repercussions of changing a ColdFusion-generated WSDL web service from RPC-encoded to document-literal?将 ColdFusion 生成的 WSDL Web 服务从 RPC 编码更改为文档文字会有什么影响? 【发布时间】:2014-04-17 16:38:10 【问题描述】:

我继承了一些由 ColdFusion 9 生成的 WSDL 的 Web 服务。CF9 默认是 RPC 编码的,所以它们就是这样。但是,最近我注意到,较新版本的 .NET 框架(或者可能是较新版本的 Visual Studio)不喜欢 RPC 编码的 WSDL。在测试中(在 C# 中),我验证了 VS 2013 仅在文档​​文字样式中正确使用该服务。

我当然愿意将样式更改为更普遍可用,但是这个网络服务已经流行了一段时间(我敢肯定,很多人都在使用),所以我想要以确保我掌握可能产生的影响。我还想知道是否可以让 ColdFusion 生成两个不同的 WSDL(或者允许即时设置编码?)。基本上,我将不胜感激有关使其兼容的最佳方法的任何建议(同时保持向后兼容性)。谢谢。

【问题讨论】:

您是否阅读过任何相关文档? help.adobe.com/en_US/ColdFusion/9.0/Developing/… 除非我从该文档中遗漏了一些东西(我已经阅读了八次),否则就是关于如何生成 WSDL,这不是我的问题。我的问题是关于改变现有 WSDL 的风格(以及由此产生的影响)。 我只是简单地问一下并给你一个开始,因为还没有答案。并不是要成为答案,否则我会将其发布为答案。很抱歉造成混乱。 【参考方案1】:

如果您可以为文档文字样式 Web 服务提供第二个 URL,您可以扩展您现有的 CFC。您的新 CFC 将具有与主要 Web 服务相同的功能和逻辑。它还可以防止没有额外的代码需要维护。对我来说唯一未知的是这是否会产生任何显着的额外开销。

<cfcomponent extends="yourExistingCFC" style="document" output="false"></cfcomponent>

我确实尝试在我的一个测试 Web 服务上将文档类型设置为 document-literal。一旦更改,SoapUI 无法解析文档文字 WSDL,但 Visual Studio 可以。因此,我会犹豫是否要更改现有 CFC 的文档样式,因为您无法判断所有客户端环境将如何处理更改。

【讨论】:

啊,聪明。我会试试的。感谢您的测试 - SoapUI 问题正是我犹豫是否要更改类型的原因。 我按照你的建议做了,它似乎生成了一个有效的文档文字 WSDL,Visual Studio 可以正确使用它。但不幸的是,它在实际使用时会引发org.xml.sax.SAXParseException: Premature end of file 错误。我在 C# 和 ColdFusion 中测试并收到相同的错误。但是,如果我将原始组件更改为文档文字样式并将生成的 WSDL 复制到静态文件,然后更新扩展组件以指向该静态文件(具有 wsdlfile 属性)而不是自动生成一个,它作品。有什么想法吗? 使用您的静态 WSDL,绑定仍然指向现有的 Web 服务文件。只要向服务器发送和从服务器发送的生成的soap 看起来相同,WSDL 来自哪里并不重要。在提出建议之前,我无法完全测试我的建议。我不确定为什么对扩展服务的请求会失败。 我最终使用组件生成和提供静态 WSDL。这并不理想,但我可以接受,因为这些 API 很少更新,因此每次更新时重新生成静态 WSDL 不会造成太大的维护损失(而且我有有限的时间来解决这个问题)。我已将您的答案标记为答案,因为它使我走上了正确的道路。谢谢!

以上是关于将 ColdFusion 生成的 WSDL Web 服务从 RPC 编码更改为文档文字会有啥影响?的主要内容,如果未能解决你的问题,请参考以下文章

将安全标头信息添加到从 WSDL 生成的 Java 代码

BizTalk Web 参考 - 生成的 XSD 具有来自 WSDL 的“丢失”信息

使用Myeclipse插件将wsdl生成java客户端代码

从 WSDL 生成请求/响应 XML

从 WSDL 文件生成 Web 服务 [关闭]

从 wsdl 生成 web 服务