2017-04-13 42 views
2

当在调用Webservice APIGetTablesBin方法,我发现了错误Web service operation GetTablesBin with parameters cannot be found.方法无法找到调用web服务API

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 folder screenshot for the API classes

任何指针将是真正有帮助吗?

+0

你已经刷新CFIDE /管理员的WSDL? (数据和服务 - > Web服务) – Seybsen

回答

1

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

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

在解决Web服务问题时,创建Web服务实例,然后转储该对象以查看该方法需要哪些参数通常很有帮助。根据CF11,“GetTablesBin”方法需要两个参数:StringArrayOfString。但是,目前的代码通过了两个String's。因此错误。

代码:

<!--- 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"数组:

要解决该错误,只需创建一个结构,使用正确的密钥,并将其传递到CFINVOKE呼叫。 (虽然我个人更喜欢createObject()这是一个稍小体积IMO)

<cfset arrayOfStrings = ["tableName1","tableName2"] /> 
<cfset tableNames.string = arrayOfStrings /> 

<cfinvoke ....> 
    <cfinvokeargument name="authToken" value="#AuthToken#"/> 
    <cfinvokeargument name="tableNames" value="#tableNames#"/> 
</cfinvoke> 
+1

非常好,非常感谢。我必须删除代码行中的方括号才能使用'。 –

+0

@GauravS - 糟糕,这是一个错字。接得好。我将用修正更新答案。 – Leigh