2011-04-06 35 views
5

错误:无法找到带有参数{part = {...},storeId = {...},contractId = {...}}的Web服务操作....调用.NET Web Service的ColdFusion 9 - 无法找到带参数的Web服务操作。帮帮我!

我创建了一个.NET Web服务,与ColdFusion页面交谈。当用户在零件号字段中输入零件号然后选中它时,会调用Web服务以获得该零件的适当定价。它如何得到定价在幕后完成,是无关紧要的,而且为了我想要达到的目的,这里显得太复杂了。

这是我竟能导通我有ColdFusion页传递3个变量:部分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 : 

正如你可以看到它变得我传递就好值。

我确信的:

  1. 我确信上面指出的Web服务地址是电流(意思是,我确信,这是包含我的新参数的最新版本)。

  2. 我手动转到Web服务,并显示wsdl(如预期)。

  3. 我可以通过转到Web服务URL来手动调用Web服务。我可以输入3个变量并单击Invoke,并返回正确的值。

这里是我的web服务代码:

 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互操作性问题。思考?

回答

4

怎么样加入refreshwsdl = “true” 以你的电话吗?

<cfinvoke webservice = "http://compassnetdev/Services/CustomerContractPartPrice.asmx?wsdl" 
      method = "GetCustomerContractPrice" 
      returnVariable = "price" 
      argumentCollection = "#vars#" 
      refreshwsdl="true"> 

否则就把WSDL的倾倒在这里。

5

Webservices可以在CFAdmin中缓存;登录到CFAdmin并转到Webservices并找到指向WSDL的web服务条目,找到并单击此条目的刷新按钮,这应该可以做到。有时我不得不删除web服务条目并重新添加它。

+0

太棒了,我认为这是我的问题的根源!感谢您的回应。当我发现答案时,请参阅上面的答案! – 2011-04-06 13:59:05

0

我找到了解决方案!问题在于ColdFusion缓存了WSDL文件。所以如果你改变了参数集合(就像在我的例子中那样,我添加了一个storeId变量,我必须重新启动ColdFusion服务(ColdFusion 9 Application Server)才能得到WSDL的新副本,这是ColdFusion的错误。

+2

我认为refresh =“wsdl”可能会诀窍。测试它,让我知道... – 2011-04-06 14:00:53

+0

@CyrilHanquez是的,工作。 – 2013-06-18 19:06:47