错误:无法找到参数{part = {...},storeId = {...},contractId = {...}}的Web服务操作....
我创建了一个与ColdFusion页面对话的.NET Web服务。当用户在零件编号字段中键入零件编号然后从中选中标签时,会调用Web服务以获得该零件的适当定价。它是如何在幕后完成定价的,是无关紧要的,并且太复杂了,不能在这里显示我想要碰到的点。
以下是我的内容 - 我让ColdFusion页面传递了3个变量: part , storeId 和 contractId 。
<cfset vars = structNew()> <cfset vars["contractId"] = "#Trim(Attributes.contract)#"> <cfset vars["part"] = "#Trim(Attributes.part)#"> <cfset vars["storeId"] = "#Trim(Attributes.store)#"> <cfinvoke webservice = "http://compassnetdev/Services/CustomerContractPartPrice.asmx?wsdl" method = "GetCustomerContractPrice" returnVariable = "price" argumentCollection = "#vars#"> </cfinvoke>
之前,我刚刚传入了 contractId 和部分,并且效果很好。没问题。但是,自从我添加 storeId 后,它就会抛出此错误消息:
Error Occurred While Processing Request Web service operation GetCustomerContractPrice with parameters {part={BV410070},storeId={001},contractId={21}} cannot be found. The error occurred in C:\inetpub\wwwroot\CustomTags\fn_get_price_2.cfm: line 58 56 : method = "GetCustomerContractPrice" 57 : returnVariable = "price" 58 : argumentCollection = "#vars#"> 59 : 60 :
正如你所看到的,它正在传递我正在传递的值。
我确定:
我确保上面显示的网络服务地址是最新的(意思是,我确保它是包含我的新参数的最新版本)。
我手动转到网络服务,wsdl显示(正如预期的那样)。
我也可以通过转到Web服务URL来手动调用Web服务。我可以输入我的3个变量并单击Invoke,然后返回正确的值。
这是我的网络服务代码:
public class CustomerContractPartPrice : System.Web.Services.WebService { [WebMethod] public decimal GetCustomerContractPrice(string part, string storeId, int contractId) { var context = new PricingBLL(); decimal price = context.GetCustomerContractPartPrice(contractId, part, storeId); return price; } }
这将转到业务对象并完成工作,并返回结果。最终我认为这是一个ColdFusion / .NET互操作性问题。想法?
答案 0 :(得分:5)
Webservices可以缓存在CFAdmin中;登录到CFAdmin并转到Webservices并找到指向您的WSDL的webservice条目,找到并单击此条目的刷新按钮,这应该可以解决问题。有时候我不得不删除webservice条目,不得不重新添加它。
答案 1 :(得分:4)
如何在通话中添加refreshwsdl =“true”呢?
<cfinvoke webservice = "http://compassnetdev/Services/CustomerContractPartPrice.asmx?wsdl"
method = "GetCustomerContractPrice"
returnVariable = "price"
argumentCollection = "#vars#"
refreshwsdl="true">
否则在这里放一个wsdl的转储。
答案 2 :(得分:0)
我找到了解决方案!问题是ColdFusion缓存了WSDL文件。因此,如果你对参数集合进行了更改(就像在我的情况下,我添加了一个storeId变量,我必须重新启动ColdFusion服务(ColdFusion 9 Application Server)才能获得WSDL的新副本。这是ColdFusion的错误。