调用 Webservice 时找不到方法 API
Method cannot be found when invoking Webservice API
在为 GetTablesBin
方法调用 Webservice API 时,出现错误 Web service operation GetTablesBin with parameters cannot be found.
Web服务调用代码
<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 存根文件夹中也缺少方法 class。
任何指示真的很有帮助吗?
Web service operation GetTablesBin with parameters
{...} cannot be found.
注意到上面写着 "with parameters" 了吗?细微差别,但它意味着 a) 该方法根本不存在或 b) 它 确实 存在,但接收到错误的参数数量或类型。在这种情况下,问题是 "b)"。
解决 Web 服务问题时,创建 Web 服务的实例,然后转储该对象以查看该方法需要哪些参数通常很有帮助。根据 CF11,"GetTablesBin" 方法需要两个参数:String
和 ArrayOfString
。但是,当前代码传入两个 String
。因此错误。
代码:
<!--- Add {refreshWSDL=false} if needed --->
<cfset ws = createObject("webservice"
, "http://www.argusmedia.com/ArgusWSVSTO/ArgusOnline.asmx?wsdl")>
<cfset writeDump(ws)>
转储:
一个ArrayOfString
是一个slightly strange beast:
... there is no direct mapping of ArrayOfString
. So it is essentially
treated as a structure, just like any other complex type. If you look
at the wsdl, ArrayOfString contains a single key named string
, whose
value is an array of 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>
在为 GetTablesBin
方法调用 Webservice API 时,出现错误 Web service operation GetTablesBin with parameters cannot be found.
Web服务调用代码
<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 存根文件夹中也缺少方法 class。
任何指示真的很有帮助吗?
Web service operation GetTablesBin with parameters {...} cannot be found.
注意到上面写着 "with parameters" 了吗?细微差别,但它意味着 a) 该方法根本不存在或 b) 它 确实 存在,但接收到错误的参数数量或类型。在这种情况下,问题是 "b)"。
解决 Web 服务问题时,创建 Web 服务的实例,然后转储该对象以查看该方法需要哪些参数通常很有帮助。根据 CF11,"GetTablesBin" 方法需要两个参数:String
和 ArrayOfString
。但是,当前代码传入两个 String
。因此错误。
代码:
<!--- Add {refreshWSDL=false} if needed --->
<cfset ws = createObject("webservice"
, "http://www.argusmedia.com/ArgusWSVSTO/ArgusOnline.asmx?wsdl")>
<cfset writeDump(ws)>
转储:
一个ArrayOfString
是一个slightly strange beast:
... there is no direct mapping of
ArrayOfString
. So it is essentially treated as a structure, just like any other complex type. If you look at the wsdl, ArrayOfString contains a single key namedstring
, whose value is an array oftype="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>