我创建了一个 ColdFusion Web 服务,但它返回的是 WDDX 而不是 SOAP。如何让它返回 SOAP 而不是 WDDX?
4 回答
对于复杂对象,您需要正确设置 CFC。阅读:使用 ColdFusion 组件定义 Web 服务的数据类型
更新:或者,您可以使用 自己创建对象的 XML 表示,然后使用in<cfxml>
返回 XML 对象。returnType="xml"
cffunction
您可以查看Coldbox的 XMLConverter Plugin 作为代码示例,用于将内置 CF 复杂类型转换为 XML。
返回一个 XML 对象,并将“ returnformat <cffunction>
”参数设置为“plain”。
<cffunction name="GetData" returntype="xml" returnformat="plain">
带有 access=remote 的 CFC 方法应该返回soap,而不是WDDX。我确信我已经使用这个功能多年了。我怀疑可能发生的是内容类型基于客户端提出的请求。我会下载Soap-UI并测试http://your.server/yourCFC.cfc?wsdl以查看 SOAP-UI 是否会被 WDDX 抛出。如果是这样,我有点茫然,但无论如何都要在这里报告,我会进一步看看。如果 Soap-UI 看到正确的响应,请查看它发送的标头并将它们与您正在发出的请求进行比较(可能通过浏览器?)
您还可以使用Fiddler记录soap-ui 流量并将其与任何其他请求源进行比较。
上面的 http 请求可能完全关闭,但检查起来相对容易,我认为它正在敲响警钟。
您可能还想检查您正在编写的函数的返回类型。为了让 CF 生成良好的 WSDL,它需要能够从您返回的 CFC 中提取元数据。
游戏有点晚了,但你是把它当作一个普通的 HTTP 请求而不是一个 SOAP 数据包?
例如,您是否这样做:
http://api.example.com/something.cfc?method=test&arg1=val1
而不是带有信封、标头、正文等的实际 SOAP 请求?
HTTP 请求默认返回 WDDX 或通过指定返回格式返回 JSON,而 SOAP 请求将以您正在寻找的格式返回数据。