2011-04-06 16 views
5

Error: Operación del servicio web .... con los parámetros {part = {...}, storeId = {...}, contractId = {...}} no se puede encontrar.ColdFusion 9 llamando al servicio web .NET: no se puede encontrar el funcionamiento del servicio web con parámetros. ¡AYUDA!

Creé un servicio web .NET que habla con una página de ColdFusion. Lo que sucede es que cuando el usuario ingresa un número de pieza en el campo de número de parte y luego pestañas, se llama al servicio web para obtener el precio apropiado para esa parte. Cómo se obtiene el precio se hace detrás de la escena, es irrelevante, y es demasiado complicado para mostrar aquí por el bien del punto que estoy tratando de transmitir.

Esto es lo que se puso en marcha situ tengo el paso página de ColdFusion en 3 variables: parte, StoreID, y 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>

Antes, sólo tenía la contractId y la parte se pasan en, y funcionó muy bien. No hay problemas. Pero ya que he añadido en el StoreID, que está lanzando este mensaje de error arriba:

 
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 : 

Como se puede ver que se está haciendo los valores que estoy pasando en muy bien.

Lo que me aseguré de:

  1. Me aseguré de que la dirección de servicio web indicado anteriormente era actual (es decir, que se aseguró de que era la versión más reciente que contenía mi nuevo parámetro).

  2. Accederé manualmente al servicio web y aparecerá el wsdl (como se esperaba).

  3. También puedo invocar manualmente el servicio web yendo a la URL del servicio web. Puedo ingresar mis 3 variables y hacer clic en Invocar, y devuelve el valor correcto.

Aquí está mi código de servicio 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; 
     } 
    }

Esto va para el objeto de negocio y hace el trabajo, y devuelve el resultado. En definitiva, creo que se trata de un problema de interoperabilidad ColdFusion/.NET. ¿Pensamientos?

Respuesta

4

¿Qué pasa con la adición de refreshwsdl = "true" a su llamada?

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

de lo contrario poner un volcado de la WSDL aquí.

5

Los servicios web pueden almacenar en caché en CFAdmin; inicie sesión en CFAdmin y vaya a los servicios web y ubique la entrada del servicio web que apunta a su WSDL, ubique y haga clic en el botón de actualización para esta entrada, eso debería funcionar. A veces tuve que eliminar la entrada del servicio web y tuve que volver a agregarla.

+0

Impresionante, creo que esa fue la raíz de mi problema !! Gracias por la respuesta. ¡Vea mi respuesta más arriba cuando descubrí la respuesta! –

0

¡Encontré la solución! El problema era que ColdFusion almacena en caché el archivo WSDL. Entonces, si realiza un cambio en la colección de parámetros (como en mi caso, agregué una variable storeId, tuve que reiniciar el servicio ColdFusion (ColdFusion 9 Application Server) para que obtuviera una copia nueva del WSDL. Esto fue culpa de ColdFusion .

+2

Creo que refresh = "wsdl" podría hacer el truco. Pruébalo y avísame ... –

+0

@CyrilHanquez Sí, eso funcionó. –

Cuestiones relacionadas