【问题标题】:ColdFusion 9 calling .NET Web Service- Web service operation with parameters cannot be found. HELP!ColdFusion 9 调用 .NET Web 服务 - 找不到带参数的 Web 服务操作。帮助!
【发布时间】:2011-07-30 20:20:09
【问题描述】:

错误:无法找到带有参数 {part={...},storeId={...},contractId={...}} 的 Web 服务操作。

我创建了一个与 ColdFusion 页面对话的 .NET Web 服务。发生的情况是,当用户在零件号字段中键入零件号然后从其中跳出时,将调用 Web 服务以获取该零件的适当定价。它如何获得定价是在幕后完成的,无关紧要,而且为了我想要表达的观点,这里太复杂了,无法展示。

这就是我要做的事情 - 我让 ColdFusion 页面传入 3 个变量:partstoreIdcontractId。 p>

之前,我只是将 contractId part 传入,效果很好。没问题。但是由于我在 storeId 中添加了,所以它会抛出此错误消息:

处理请求时发生错误 找不到参数为 {part={BV410070},storeId={001},contractId={21}} 的 Web 服务操作 GetCustomerContractPrice。 错误发生在 C:\inetpub\wwwroot\CustomTags\fn_get_price_2.cfm:第 58 行 56:方法=“GetCustomerContractPrice” 57:returnVariable = "价格" 58:参数集合=“#vars#”> 59: 60:

如您所见,它可以很好地获取我传入的值。

我确定的:

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

  2. 我手动转到 Web 服务,然后显示 wsdl(如预期的那样)。

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

这是我的网络服务代码:

 公共类 CustomerContractPartPrice : System.Web.Services.WebService
    {
        [网络方法]
        公共小数 GetCustomerContractPrice(字符串部分,字符串 storeId,int contractId)
        {
            var context = new PricingBLL();
            小数价格 = context.GetCustomerContractPartPrice(contractId, part, storeId);
            退货价格;
        }
    }

这传给业务对象并完成工作,并返回结果。最终我认为这是一个 ColdFusion/.NET 互操作性问题。想法?

【问题讨论】:

    标签: .net coldfusion service


    【解决方案1】:

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

    【讨论】:

    • 太棒了,我认为这是我问题的根源!感谢您的回复。当我找到答案时,请参阅上面的答案!
    【解决方案2】:

    我找到了解决方案!问题是 ColdFusion 缓存了 WSDL 文件。因此,如果您对参数集合进行更改(比如在我的情况下,我添加了一个 storeId 变量,我必须重新启动 ColdFusion 服务(ColdFusion 9 应用程序服务器)才能获得 WSDL 的新副本。这是 ColdFusion 的错.

    【讨论】:

      【解决方案3】:

      在您的通话中添加 refreshwsdl="true" 怎么样?

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

      否则在此处放置 wsdl 的转储。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多