2011-04-06 7 views
5

त्रुटि: वेब सेवा संचालन .... पैरामीटर के साथ {part = {...}, storeId = {...}, contractId = {...}} नहीं मिल सका।कोल्डफ्यूजन 9 कॉलिंग .NET वेब सेवा- पैरामीटर के साथ वेब सेवा संचालन नहीं मिल सकता है। मदद!

मैंने एक .NET वेब सेवा बनाई जो कोल्डफ्यूजन पृष्ठ से बात करता है। क्या होता है जब उपयोगकर्ता भाग संख्या फ़ील्ड में भाग संख्या टाइप करता है तो उसके बाहर टैब, उस सेवा के लिए उचित मूल्य प्राप्त करने के लिए वेब सेवा को बुलाया जाता है। दृश्यों के पीछे मूल्य निर्धारण कैसे किया जाता है, यह अप्रासंगिक है, और उस बिंदु के लिए यहां दिखाने के लिए बहुत जटिल है जिसे मैं पार करने की कोशिश कर रहा हूं। हिस्सा, storeId, और contractId:

यहाँ मैं क्या ऑन जा रहा हो गया मैं 3 चर में ColdFusion पेज गुजर राशि है।

<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. मुझे यकीन है कि वेब सेवा का पता ऊपर संकेत वर्तमान था (जिसका अर्थ है, मुझे यकीन है कि यह नवीनतम निर्माण कि मेरी नई पैरामीटर है था)।

  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; 
     } 
    }

यह व्यापार वस्तु के लिए बाहर चला जाता है और काम करता है, और परिणाम देता है। अंततः मुझे लगता है कि यह एक शीतफ्यूजन/.NET इंटरऑपरेबिलिटी मुद्दा है। विचार?

उत्तर

4

क्या अपने कॉल करने के लिए refreshwsdl = "true" जोड़ने के बारे में?

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

अन्यथा wsdl की एक डंप यहाँ डाल दिया।

5

वेबसाइट्स CFAdmin में कैश कर सकते हैं; CFAdmin में लॉगिन करें और वेबसाइट सर्विसेज पर जाएं और अपने डब्लूएसडीएल को इंगित करने वाली webservice प्रविष्टि का पता लगाएं, इस प्रविष्टि के लिए ताज़ा करें बटन को ढूंढें और क्लिक करें, जो चाल चलाना चाहिए। कभी-कभी मुझे webservice प्रविष्टि को हटाना पड़ा और इसे फिर से जोड़ना पड़ा।

+0

बहुत बढ़िया, मुझे लगता है कि मेरी समस्या की जड़ थी !! जवाब के लिए धन्यवाद। जैसा कि मैंने जवाब पाया, ऊपर मेरा जवाब देखें! –

0

मुझे समाधान मिला! समस्या यह थी कि कोल्डफ्यूजन डब्लूएसडीएल फाइल को कैश करता है। तो यदि आप पैरामीटर संग्रह में बदलाव करते हैं (जैसे कि मेरे मामले में, मैंने एक स्टोर आईडी वैरिएबल जोड़ा है, तो मुझे डब्लूएसडीएल की ताजा प्रति प्राप्त करने के लिए कोल्डफ्यूजन सेवा (कोल्डफ्यूजन 9 एप्लिकेशन सर्वर) को पुनरारंभ करना पड़ा। यह कोल्डफ्यूजन की गलती थी ।

+2

मुझे लगता है कि रीफ्रेश = "wsdl" चाल कर सकता है। इसका परीक्षण करें और मुझे बताएं ... –

+0

@CyrilHanquez हां, यह काम किया। –