डब्ल्यूसीएफ सेवा - पिछड़ा संगतता मुद्दा

मैं बस कुछ डब्ल्यूसीएफ सेवाओं को बनाने में शामिल हूं, लेकिन मुझे विरासत (.NET 1.1 और 2.0) क्लाइंट अनुप्रयोगों के लिए उन्हें पिछड़ा संगत बनाने की आवश्यकता है।

मैंने 3.0 और अधिक क्लाइंट के लिए सही ढंग से चलाने के लिए सेवाएं प्राप्त करने में कामयाब रहे हैं, लेकिन जब मैं एक बुनियादी एचटीपी बाइंडिंग एंडपॉइंट (जो मुझे विश्वास है कि मुझे अनुकूलता के लिए जरूरी है) का उपयोग करके सेवाओं को प्रकाशित करते हैं, तो सेवा मेरे विधि हस्ताक्षर को दोहराती है। जैसे

public bool MethodToReturnTrue(string seedValue);

क्लाइंट ऐप्स के रूप में दिखाई देता है

public void MethodToReturnTrue(string seedValue, out bool result, out bool MethodToReturnTrueResultSpecified);

मैंने अपने कॉन्फ़िगरेशन पैरामीटर की कोशिश की है जो मैं अपने स्वयं-होस्टिंग कंसोल ऐप के लिए app.config में सोच सकता हूं, लेकिन मुझे यह फ़ंक्शन अपेक्षित नहीं लगता है। मुझे लगता है कि इससे इस तथ्य का कारण बन सकता है कि मेरी अपेक्षाएं त्रुटिपूर्ण हैं, लेकिन मुझे आश्चर्य होगा कि एक डब्ल्यूसीएफ सेवा एक डाउन-स्तरीय क्लाइंट को बूल रिटर्न टाइप को संभालने में असमर्थ है।

मेरा वर्तमान app.config इस तरह दिखता है।

<?xml version="1.0" encoding="utf-8" ?>
  
  
    
      
        
        
        
      
    
    
      
        
            
        
      
    
  

क्या कोई सलाह दे सकता है?

0
ro fr bn

3 उत्तर

ठीक है, हमें इस मुद्दे को अल्प अवधि में हल करने की आवश्यकता है, और इसलिए हम "इंटरऑप" या संगतता परत के विचार के साथ आए।

Baiscally, हम सब कुछ परियोजना के लिए एक पारंपरिक एएसएमएक्स वेब सेवा जोड़ा गया था, और मूल डब्ल्यूसीएफ कॉल का उपयोग कर डब्ल्यूसीएफ सेवा कहा जाता है। हम फिर उचित प्रकार के पुन: फैक्टरिंग काम के बिना उचित प्रकार के क्लाइंट अनुप्रयोगों को वापस करने में सक्षम थे। मुझे पता है कि यह एक हैकी समाधान था, लेकिन यह इतना अच्छा विकल्प था कि हमारे पास इतनी बड़ी विरासत कोड-बेस थी। और जोड़ा बोनस यह है कि यह वास्तव में आश्चर्यजनक रूप से अच्छी तरह से काम करता है। :)

0
जोड़ा

आह, यह मुझे मार रहा है! मैंने इसे लगभग 3 महीने पहले काम पर किया था, और अब मैं सभी विवरण याद नहीं कर सकता।

हालांकि, मुझे याद है कि आपको मूल एचटीपी बाइंडिंग की आवश्यकता है, और आप नए सीरिएलाइज़र (जो डिफ़ॉल्ट है) का उपयोग नहीं कर सकते हैं; आपको "पुराना" XmlSerializer का उपयोग करना होगा।

दुर्भाग्य से, मैं उस जगह पर काम नहीं करता जहां मैंने यह किया था, इसलिए मैं कोड को नहीं देख सकता। मैं अपने मालिक को फोन करूंगा और देख सकता हूं कि मैं क्या खोद सकता हूं।

0
जोड़ा

आपको XmlSerializer का उपयोग करना होगा। उदाहरण के लिए:

[ServiceContract(Namespace="CentreServiceNamespace")]
[XmlSerializerFormat(Style=OperationFormatStyle.Document, SupportFaults=true, Use=OperationFormatUse.Literal)]
public interface ICentreService {
    [OperationContract(Action="CentreServiceNamespace/MethodToReturnTrue")]
    bool MethodToReturnTrue(string seedValue);
}

आपको ऑपरेशन एक्शन नाम मैन्युअल रूप से सेट करना होगा क्योंकि ऑटो-जेनरेटेड डब्ल्यूसीएफ नाम एएसएमएक्स एक्शन नाम से अलग-अलग बनाया गया है (डब्ल्यूसीएफ में इंटरफेस नाम भी शामिल है, एएसएमएक्स नहीं है)।

आपके द्वारा उपयोग किए जाने वाले किसी भी डेटा अनुबंध को [DataContract] के बजाय [XmlType] से सजाया जाना चाहिए।

आपकी कॉन्फ़िगरेशन फ़ाइल को बदलने की आवश्यकता नहीं है।

0
जोड़ा