2017-04-13 74 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