ColdFusion 9, вызывающий .NET Web Service - не удается найти работу Web-сервиса с параметрами.ПОМОГИТЕ! - PullRequest
5 голосов
/ 06 апреля 2011

Ошибка: операция веб-службы .... с параметрами {part = {...}, storeId = {...}, contractId = {...}} не найдена.

Я создал веб-сервис .NET, который общается со страницей ColdFusion.Что происходит, когда пользователь вводит номер детали в поле номера детали, а затем вкладывает его, веб-служба вызывается для получения соответствующей цены для этой детали.Как это получается, цены устанавливаются за кулисами, не имеют значения и слишком сложны, чтобы показывать их здесь, ради того, что я пытаюсь объяснить.

Вот что я получил - ячтобы страница 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 и part были переданы, и это сработало замечательно.Нет проблем.Но так как я добавил в 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. Я убедился, что указанный выше адрес веб-службы является текущим (то есть, я убедился, что это была последняя сборка, которая содержала мой новый параметр).

  2. Я вручную захожу в веб-сервис, и wsdl отображается (как и ожидалось).

  3. Я могу вручную вызвать веб-сервиса также перейдя по URL веб-службы.Я могу ввести свои 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.Мысли?

Ответы [ 3 ]

5 голосов
/ 06 апреля 2011

Веб-сервисы могут кэшироваться в CFAdmin;войдите в CFAdmin и перейдите на веб-сервисы и найдите запись веб-сервиса, указывающую на ваш WSDL, найдите и нажмите кнопку обновления для этой записи, что должно помочь.Иногда мне приходилось удалять запись веб-службы и приходилось заново ее добавлять.

4 голосов
/ 06 апреля 2011

Как насчет добавления refreshwsdl = "true" к вашему звонку?

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

В противном случае поместите дамп wsdl здесь.

0 голосов
/ 06 апреля 2011

Я нашел решение!Проблема заключалась в том, что ColdFusion кэширует файл WSDL.Поэтому, если вы вносите изменения в коллекцию параметров (как в моем случае, я добавил переменную storeId, мне пришлось перезапустить службу ColdFusion (сервер приложений ColdFusion 9), чтобы она получила новую копию WSDL. Это была ошибка ColdFusion.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...