将由ColdFusion生成的RPC编码的WSDL Web服务更改为文档字面量会产生什么后果?

7

我继承了一些由ColdFusion 9生成的WSDL Web服务。CF9的默认设置为RPC-encoded格式,因此它们也是这种格式。然而,最近我注意到较新版本的.NET框架(或者可能是较新版本的Visual Studio)不喜欢RPC-encoded格式的WSDL。在使用C#进行测试时,我验证了只有当服务采用document-literal风格时,VS 2013才能正确地消费该服务。

当然,我愿意改变风格以使其更具普适性,但这个Web服务已经被广泛使用了一段时间(并且我确信被许多人使用),因此我希望确保我了解可能产生的后果。我还想知道是否有可能让ColdFusion生成两个不同的WSDLs(或允许动态设置编码?)基本上,我希望获得任何关于如何使其兼容(同时保持向后兼容性)的最佳建议。谢谢。


你有阅读过相关文档吗?http://help.adobe.com/zh_CN/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-78a6.html - Cory Fail
1
除非我在那份文档中漏掉了什么(我已经读了八遍),否则那只是关于如何生成WSDL的内容,而不是我的问题。我的问题是关于更改现有WSDL的样式(以及其带来的影响)。 - Nicole S.
我只是简单地询问并给你一个起点,因为还没有答案。这不是答案,否则我会将其发布为答案。对于造成的困惑,我很抱歉。 - Cory Fail
1个回答

0

如果您可以接受为文档字面风格的 Web 服务拥有第二个 URL,那么您只需扩展现有的 CFC 即可。您的新 CFC 将具有与主 Web 服务相同的所有函数和逻辑。这也将避免需要维护任何额外的代码。唯一未知的是,我不确定这是否会创建任何显着的额外开销。

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

我曾尝试将一个测试 Web 服务的文档类型设置为 document-literal。一旦更改,SoapUI 无法解析 document-literal WSDL,但 Visual Studio 可以。因此,我会对更改现有 CFC 的文档样式持犹豫态度,因为您无法确定所有客户端环境如何处理更改。


啊,聪明。我会试试的。感谢你的测试 - SoapUI问题正是我犹豫改变类型的原因。 - Nicole S.
我按照你的建议做了,看起来生成了一个有效的基于文档的WSDL,Visual Studio能够正确消费。 但很遗憾,在实际使用时它会抛出“org.xml.sax.SAXParseException:文件结束过早”的错误。 我已经在C#和ColdFusion中测试,并收到了相同的错误。 但是,如果我将原始组件更改为基于文档的literal样式,并将结果的WSDL复制到静态文件中,然后更新扩展组件以指向该静态文件(使用“wsdlfile”属性)而不是自动生成的,则可以正常工作。 有什么想法吗? - Nicole S.
使用静态WSDL文件时,绑定仍指向现有的Web服务文件。只要发送到服务器和从服务器返回的生成的SOAP看起来相同,WSDL的来源就无关紧要。在建议之前,我无法完全测试我的建议。我不确定为什么对扩展服务发出的请求会失败。 - Twillen
最终我使用一个组件生成并提供静态WSDL。虽然不是理想的解决方案,但由于这些API很少更新,因此每次更新时重新生成静态WSDL并不会对维护造成太大的影响(而且我有限的时间来处理这个问题)。我将您的答案标记为正确答案,因为它让我找到了正确的解决方案。谢谢! - Nicole S.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接