2008-08-08 16 views
7

मैं बस कुछ डब्ल्यूसीएफ सेवाओं को बनाने में शामिल हूं, लेकिन मुझे विरासत (.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" ?> 
<configuration> 
    <system.serviceModel> 
    <services> 
     <service behaviorConfiguration="MyServiceTypeBehaviors" Name="MyCompany.Services.CentreService.CentreService"> 
     <clear /> 
     <endpoint address="http://localhost:8080/CSMEX" binding="basicHttpBinding" bindingConfiguration="" contract="IMetadataExchange" /> 
     <endpoint address="http://localhost:8080/CentreService" binding="basicHttpBinding" bindingName="Compatible" name="basicEndpoint" contract="MyCompany.Services.CentreService.ICentreService" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="MyServiceTypeBehaviors" > 
      <serviceMetadata httpGetEnabled="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

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

उत्तर

3

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

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

3

आह, यह मुझे मार रहा है! मैंने इसे लगभग 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); 
} 

आप क्योंकि स्वत: जनरेट WCF नाम (WCF इंटरफ़ेस नाम के रूप में अच्छी तरह से शामिल है, ASMX नहीं करता है) ASMX कार्रवाई नाम से अलग ढंग से निर्माण किया है मैन्युअल रूप से संचालन क्रिया का नाम सेट करना होगा।

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

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

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