jpm*_*yob 3 coldfusion web-services
我正在测试使用 Web 服务,但出现错误。
这是 Web 服务组件:
<cfcomponent >
<cffunction name="listBooks" access="remote" returntype="string" output="no" >
<cfquery name="getBooks" datasource="cfbookclub" >
SELECT bookID, title, bookDescription, genre
FROM books
ORDER BY title desc
</cfquery>
<cfsavecontent variable="bookList" >
<books>
<cfoutput query="getBooks" >
<book id="#getBooks.bookID#" >
<title>#XMLFormat( getBooks.title )#</title>
<description>#XMLFormat( getBooks.bookDescription )#</description>
<genre>#XMLFormat( getBooks.genre )#</genre>
</book>
</cfoutput>
</books>
</cfsavecontent>
<cfreturn bookList >
</cffunction>
Run Code Online (Sandbox Code Playgroud)
这是消费页面:
<cfinvoke
webservice="http://127.0.0.1/books.cfc?wsdl"
method="listBooks"
returnvariable="rawXMLBookList" >
</cfinvoke>
Run Code Online (Sandbox Code Playgroud)
看起来很简单 - 当我收到初始错误时,我实际上是在尝试传递一个参数“流派”,
Web service parameter name category cannot be found in the provided parameters {genre}.
Run Code Online (Sandbox Code Playgroud)
所以我删除了所有对参数的引用,仍然得到这个错误
Web service operation with parameters {} cannot be found.
Run Code Online (Sandbox Code Playgroud)
该错误听起来像是找不到网络服务,但是如果我将 url 剪切并粘贴到浏览器中,我会得到预期的 XML 文档...
这个网站上还有另一个类似的帖子,但问题是 base64 问题,我只是返回 txt,所以我不认为这是一个类似的问题,即使错误 msg 是相似的。
尝试将refreshWSDL参数添加到您的<cfinvoke>调用中,看看是否有帮助。
<cfinvoke
webservice="http://127.0.0.1/books.cfc?wsdl"
method="listBooks"
refreshwsdl="yes"
returnvariable="rawXMLBookList">
</cfinvoke>
Run Code Online (Sandbox Code Playgroud)
设置会refreshwsdl="yes"重新加载 WSDL 文件并重新生成用于使用 Web 服务的工件。
请注意,您不想为所有请求保留此设置。您只需要为一个请求设置它来刷新工件。那么你应该把它改回refreshwsdl="no". 直到你再次需要它。
以下是Charlie Arehart 博客中关于该refreshWSDL论点的摘录:
为什么必须刷新 Web 服务元数据?
只是备份片刻,问题源于 CF 试图提供帮助。在对给定 Web 服务的第一个请求中,CF 会进行一些缓存以加快未来的请求,而不是缓存 Web 服务方法的结果,而是缓存 CF 根据 Web 服务本身的描述使用的工件。
CF 使用在第一次调用时报告的 web 服务描述 (WSDL) 来创建一个基于它的 java 代理/存根,然后它在从 CF 到该 web 服务的未来调用中重用它。
如果/何时 Web 服务元数据发生变化,就会出现问题。CF 不会知道,并将继续使用旧的缓存代理/存根,如果您的长时间运行的代码与 Web 服务返回的新 WSDL 不匹配,则它可能会失败。
所以我们需要一种方法来告诉 CF 刷新它的代理存根缓存。
这个新功能当然是实现这一目标的最简单方法,但它不是唯一的方法。
| 归档时间: |
|
| 查看次数: |
4182 次 |
| 最近记录: |