调用Webservice API时无法找到方法

时间:2017-04-13 05:56:12

标签: web-services coldfusion coldfusion-9

在为GetTablesBin方法调用Webservice API时,我收到错误Web service operation GetTablesBin with parameters cannot be found.

Webservice调用代码

<cfinvoke  
    webservice="http://www.argusmedia.com/ArgusWSVSTO/ArgusOnline.asmx?wsdl"
    method="GetTablesBin" 
    returnvariable="binResponse"> 
    <cfinvokeargument name="authToken" value="#AuthToken#"/>
    <cfinvokeargument name="tableNames" value="#tablename#"/>
 </cfinvoke>

我可以使用SOAPUI客户端看到该方法正常运行。

在进一步挖掘的同时,发现Coldfusion stubs文件夹中缺少方法类。

Stubs folder screenshot for the API classes

任何指针都会非常有用吗?

1 个答案:

答案 0 :(得分:1)

  

Web服务操作GetTablesBin 带参数   {...}无法找到。

注意它说“带参数”?微妙的区别,但它或者意味着a)方法根本不存在或b)它 存在,但是接收错误的数量或类型的参数。在这种情况下,问题是“b)”。

在对Web服务问题进行故障排除时,创建Web服务实例通常很有帮助,然后转储该对象以查看该方法所需的参数。根据CF11,“GetTablesBin”方法需要两个参数:StringArrayOfString。但是,当前代码传递了两个String。因此错误。

<强>代码:

<!--- Add {refreshWSDL=false} if needed --->
<cfset ws = createObject("webservice"
              , "http://www.argusmedia.com/ArgusWSVSTO/ArgusOnline.asmx?wsdl")>
<cfset writeDump(ws)>

<强>转储:

Web Service - GetTablesBin Method

ArrayOfStringslightly strange beast

  

... ArrayOfString没有直接映射。所以它本质上是   被视为一种结构,就像任何其他复杂类型一样。如果你看   在wsdl中,ArrayOfString包含一个名为string的密钥,其名称为type="s:string"   value是createObject()

的数组

要解决此错误,只需使用正确的密钥创建一个结构并将其传递给cfinvoke调用。 (虽然我个人更喜欢<cfset arrayOfStrings = ["tableName1","tableName2"] /> <cfset tableNames.string = arrayOfStrings /> <cfinvoke ....> <cfinvokeargument name="authToken" value="#AuthToken#"/> <cfinvokeargument name="tableNames" value="#tableNames#"/> </cfinvoke> ,这是一个不那么笨重的IMO)

.
相关问题