2010-05-10 18 views
6

नहीं भेजता है, मैं एक डब्ल्यूसीएफ वेब सेवा लागू कर रहा हूं जो उस क्लाइंट के साथ इंटरैक्ट करता है जिसका कोड मैं नियंत्रित नहीं करता हूं। डब्ल्यूएसडीएल ग्राहक द्वारा आपूर्ति की गई थी।डब्ल्यूएसडीएल पहला डब्ल्यूसीएफ सर्वर जहां क्लाइंट SOAPAction

मैंने एसवीसीयूटीएल का उपयोग करते हुए डब्ल्यूएसडीएल से सी # फाइलें उत्पन्न कीं, और here पर चर्चा की गई त्रुटियों के अलावा मुझे कोई समस्या नहीं थी।

एसएसएल सक्षम (क्लाइंट द्वारा आवश्यक) के साथ आईआईएस 7.0 में सेवा होस्ट करने के बाद मैंने क्लाइंट को सेवा के लिए अनुरोध करने का प्रयास किया।

The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None). 

मैं सत्यापित है कि मैं SOAPUI के साथ मेटाडेटा सेवा द्वारा प्रकाशित इस्तेमाल कर सकते हैं एक ही अनुरोध करने के लिए:

इस बिंदु पर मैं निम्नलिखित त्रुटि मिली। यह ठीक काम किया।

मैंने फिर क्लाइंट के साथ आपूर्ति की गई डब्ल्यूएसडीएल का उपयोग करके SOAPUI का उपयोग करने का प्रयास किया। यह उपरोक्त खाली खाली त्रुटि त्रुटि के साथ विफल रहा।

मैंने फिर वायरशर्क (एसएसएल डिक्रिप्शन को सक्षम करने) को जोड़ दिया और सत्यापित किया कि क्लाइंट से भेजे गए संदेश में वास्तव में SOAPAction की कमी है, इसलिए ऐसा लगता है कि यह निश्चित रूप से मुद्दा है।

जैसा कि मैं क्लाइंट को नहीं बदल सकता, ऐसे क्लाइंट के साथ बातचीत करने के लिए डब्ल्यूसीएफ वेब सेवा प्राप्त करने का कोई तरीका है? मुझे लगता है कि इसे एसओएपीएक्शन के साथ अनुरोध स्वीकार करने की आवश्यकता होगी और इसके बजाय एसओएपी लिफाफा में अनुरोध ऑब्जेक्ट के प्रकार से वांछित अनुरोध प्राप्त करना होगा?

उत्तर

18

निम्नलिखित मुझे (this धागा के आधार पर) के लिए काम किया:

  1. डाउनलोड माइक्रोसॉफ्ट WCF उदाहरण।
  2. WF_WCF_Samples \ WCF \ तानाना \ इंटरॉप \ RouteByBody \ सीएस \ सेवा से अपनी परियोजना
    • DispatchByBodyOperationSelector.cs के लिए निम्न फ़ाइलें जोड़ें
    • DispatchByBodyBehaviorAttribute.cs
  3. के लिए निम्न विशेषताएं जोड़ें अपने इंटरफेस (अगले अपने ServiceContract को)
    • XmlSerializerFormat
    • DispatchByBodyBehavior
  4. आपकी सेवा इंटरफ़ेस

    [OperationContract(Action = "")] 
    public void DoNothing() 
    { 
    } 
    
  5. मेरी सेवा के लिए के लिए निम्न जोड़े WrapperName और Wrappernamespace सभी संदेशों के लिए null हैं। मैं DispatchByBodyBehaviorAttribute में जाते हैं और इस के लिए जाँच करने के लिए निम्नलिखित लाइनों को जोड़ने के लिए ApplyDispatchBehavior() संपादित करने के लिए किया था:

    if (qname.IsEmpty) { 
        qname = new XmlQualifiedName(operationDescription.Messages[0].Body.Parts[0].Name, operationDescription.Messages[0].Body.Parts[0].Namespace); 
    } 
    
+0

स्पॉट पर! मैंने इस मुद्दे को देखने में कुछ घंटे बिताए हैं। मैं अपनी नई डब्ल्यूसीएफ वेब सेवा समान (क्लाइंट परिप्रेक्ष्य से) को एक पुरानी वेब सेवा में देखने की कोशिश कर रहा था और वास्तव में इस पर अटक गया था। पुराने संस्करण से मेल खाने के लिए wsdl प्राप्त करने के लिए मुझे कई खाली कार्रवाइयां निर्दिष्ट करनी पड़ीं, लेकिन इससे डब्लूसीएफ टूट गया।यही है, जब तक मुझे आपका उत्तर नहीं मिला जो पूरी तरह से काम करता था। अगर मैं आपको एक से अधिक बार बढ़ा सकता हूं, तो मैं करूँगा! –

+0

खुशी है कि मैं मदद कर सकता हूं। –

+0

यदि कोई इस समाधान को लागू करता है, और त्रुटि प्राप्त करना शुरू कर देता है "यह संदेश ऑपरेशन का समर्थन नहीं कर सकता क्योंकि इसे पढ़ा गया है" डीबगिंग करते समय, मेरी प्रतिक्रिया यहां देखें जो मदद कर सकती है: http://stackoverflow.com/a/11170390/ 1373170 –

संबंधित मुद्दे