2008-09-26 13 views
5

मैं spec के लिए एक वेब सेवा लिखने की कोशिश कर रहा हूं और इस विधि के आधार पर एक अलग प्रतिक्रिया निकाय की आवश्यकता है कि विधि सफलतापूर्वक पूर्ण हो या नहीं। मैंने दो अलग-अलग डेटाकंट्रैक्ट कक्षाएं बनाने की कोशिश की है, लेकिन मैं उन्हें कैसे वापस कर सकता हूं और उन्हें सही ढंग से क्रमबद्ध कर सकता हूं?क्या डब्ल्यूसीएफ आरईएसटी विधि से विभिन्न प्रकारों को वापस करने का कोई तरीका है?

उत्तर

1

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

अधिक जानकारी के लिए BlogSvc और विशेष रूप से RestAtomPubService.cs WCF service देखें। नोट, वह स्रोत कोड आपको यह भी दिखाएगा कि विभिन्न प्रकार के डेटा को डब्ल्यूसीएफ आराम विधि में कैसे स्वीकार किया जाए, जिसके लिए सामग्री प्रकार मैपर की आवश्यकता होती है।

+0

मुझे स्रोत में उस फ़ाइल (RestAtomPubService.cs) नहीं मिली, क्या मुझे याद आया या इसे हटा दिया गया है? धन्यवाद। –

+0

हम बाद में आरईएसटी के लिए डब्ल्यूसीएफ से चले गए हैं क्योंकि यह हमारी जरूरतों के लिए पर्याप्त लचीला नहीं था। मुझे लगता है कि फाइल अभी भी इतिहास में होनी चाहिए। – JarrettV

0

यदि आप एक्सएमएल आधारित बाध्यकारी का उपयोग कर रहे हैं, तो मेरा मानना ​​है कि ऐसा करने का कोई तरीका नहीं है। उस स्थिति में एक साधारण समाधान में विफलता होने पर संदेश ध्वज का हिस्सा होना चाहिए, और आवश्यकता होने पर विफलता जानकारी को कहीं भी स्टोर करना होगा। एक JSON बाध्यकारी के लिए आप किसी ऑब्जेक्ट को लौटने वाली विधि का उपयोग करने में सक्षम हो सकते हैं, फिर दो अलग-अलग प्रकार की ऑब्जेक्ट्स लौटा सकते हैं। अगर मुझे सही याद है (जो दुर्लभ है), यह संभव है क्योंकि ऑब्जेक्ट serialization विशेषताओं के साफ होने पर जावास्क्रिप्टसेरियलाइज़र क्लास प्रतिबिंब का उपयोग करता है।

2

यह इंगित करने का सबसे अच्छा तरीका है कि आपकी डब्लूसीएफ वेब सेवा विफल हो गई है, जो फॉल्टएक्सप्शन फेंकना होगा। आपकी सेवा web.config फ़ाइलों में सेटिंग्स हैं जो त्रुटि के हिस्से के रूप में संपूर्ण गलती संदेश क्लाइंट को पास करने की अनुमति देती हैं।

एक और दृष्टिकोण उसी आधार वर्ग या इंटरफ़ेस से आपके दोनों परिणामों को प्राप्त करने के लिए हो सकता है। सेवा आधार प्रकार का एक उदाहरण वापस कर देगा। फिर आप क्लाइंट को सूचित करने के लिए KnownType विशेषता का उपयोग कर सकते हैं कि कई प्रकार लौटाए जा सकते हैं। इसके बारे में सोचने के लिए आओ, ऑब्जेक्ट को मूल प्रकार के रूप में उपयोग करना संभव हो सकता है, लेकिन मैंने कोशिश नहीं की है।

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

यदि आपको ADO.NET डेटा सेवाओं के साथ समस्याएं आ रही हैं, मेरे पास कम अनुभव है।

Here's some information को लागू करने FaultContracts

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