.net coldfusion service

ColdFusion 9 llamando al servicio web.NET: no se puede encontrar la operación del servicio web con parámetros. ¡AYUDA!



service (3)

¡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 .

Error: Operación del servicio web .... con los parámetros {part = {...}, storeId = {...}, contractId = {...}} no se puede encontrar.

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 tengo en marcha: tengo la página ColdFusion pasando en 3 variables: part , 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, solo tenía el ID de contrato y la parte que se pasó, y funcionó muy bien. No hay problemas. Pero desde que agregué en el storeId , está lanzando este mensaje de error:

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 puede ver, está obteniendo los valores que estoy pasando muy bien.

De lo que me aseguré:

  1. Me aseguré de que la dirección del servicio web indicada anteriormente fuera actual (es decir, me aseguré de que fuera la última versión que contenía mi nuevo parámetro).

  2. Voy manualmente al servicio web y aparece 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 al objeto comercial y hace el trabajo, y devuelve el resultado. En definitiva, creo que se trata de un problema de interoperabilidad ColdFusion / .NET. ¿Pensamientos?


¿Qué tal agregar refreshwsdl = "true" a tu llamada?

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

De lo contrario, ponga un volcado del wsdl aquí.


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.