2010-09-15 6 views
9

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

यहाँ कोड है: अगर मैं IClientUser साथ ClientUser की जगह

[ServiceContract] 
public interface IClientUserRegistration 
{ 
    [OperationContract] 
    void RegisterClientUser(ClientUser clientUser); 

    [OperationContract] 
    List<ClientUser> GetUsers(); 
} 

, WCF टेस्ट ग्राहक का कहना है कि RegisterClientUser ऑपरेशन समर्थित नहीं है, क्योंकि यह प्रकार System.Object उपयोग करता है। अगर मैं सूची के साथ GetUsers के रिटर्न वैल्यू को प्रतिस्थापित करता हूं, तो यह कहता है कि यह ऑपरेशन समर्थित नहीं है क्योंकि यह System.Object [] प्रकार का उपयोग करता है। यह इन त्रुटियों को क्यों देता है?

आईसीलिएंट यूज़र का उपयोग करने का प्रयास करने का कारण यह है कि मैं आईसीलिएंट यूजर इंटरफेस को लागू करने वाले विभिन्न उपयोगकर्ता प्रकारों को कार्यान्वित कर सकता हूं और उन्हें रजिस्टर क्लाइंट में पास कर सकता हूं, लेकिन अगर मैं केवल क्लाइंटयूसर को पास करने में सक्षम हूं, तो मुझे एक गुच्छा बनाना होगा रजिस्टर क्लाइंट ओवरराइड जो विभिन्न प्रकार के उपयोगकर्ताओं को लेते हैं।

उत्तर

13

एसओएपी में इंटरफेस की कोई अवधारणा नहीं है। इससे deserialization मुश्किल हो जाएगा।

+0

यदि यह एक आरईएसटी आधारित सेवा है, तो क्या मैं इंटरफेस का उपयोग कर सकता हूं या यह वही है। मैं इसके लिए नया हूं इसलिए मुझे माफ़ कर दो। मेरे प्रश्न के दूसरे भाग के बारे में आपने बताया कि एसओएपी में इंटरफेस की कोई अवधारणा नहीं है। अगर मैं अलग-अलग ग्राहकों को पंजीकृत करना चाहता हूं, तो मुझे RegisterClientUser विधि को ओवरराइड करना होगा, उदाहरण के लिए, RegisterClientUser (SuperUser superUser); – Xaisoft

+3

हाँ, यह वही परवाह है। किसी ऑब्जेक्ट के भीतर सभी मानों का एक्सएमएल प्रतिनिधित्व करने की कोशिश कीजिए, लेकिन आपको केवल चाबियों का एक छोटा सा हिस्सा पता है। आप अपना काम पूरा नहीं कर पाएंगे। डब्ल्यूसीएफ इसे उसी तरह देखता है। –

+4

स्पॉट ऑन - डब्ल्यूसीएफ कॉल ** नहीं ** .NET फ़ंक्शन कॉल हैं - वे क्लाइंट से सर्वर (और बैक) में पारित किए गए क्रमबद्ध संदेश हैं और इंटरफेस स्वयं को क्रमबद्ध करने के लिए उधार नहीं देते हैं .... –

11

ऐसा इसलिए है क्योंकि ऑब्जेक्ट को क्लाइंट और सर्वर के बीच गुजरने के लिए क्रमबद्ध किया जाना है। आपको "ऑब्जेक्ट" प्रकार को पारित करने की अनुमति नहीं है। सभी प्रकार कंक्रीट होना चाहिए ताकि वे सही ढंग से क्रमबद्ध और deserialized किया जा सके। इंटरफ़ेस इंटरफ़ेस के उप-प्रकार के साथ "ऑब्जेक्ट" प्रकार से अधिक कुछ नहीं है। पूरी तरह से वस्तु को deserialized और serialized नहीं किया जा सकता है, केवल इंटरफ़ेस सदस्य हो सकता है। यह दोनों पक्षों पर वास्तव में गन्दा कार्यान्वयन के लिए होगा।

+0

धन्यवाद क्या आप जॉन सॉंडर्स को मेरी टिप्पणी पर ध्यान देंगे। – Xaisoft

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

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