2010-02-15 9 views
7

उद्देश्य एक ऐसी सेवा का निर्माण करना है जिसे मैं jQuery और मानकों के आधार पर वेब फ्रंट-एंड, मोबाइल डिवाइस "वसा-क्लाइंट" के माध्यम से उपभोग करूंगा और बहुत अधिक संभावना है कि एक WPF डेस्कटॉप एप्लिकेशन।.NET में एक नई रीस्टफुल वेब सेवा विकसित करना - मुझे कहां से शुरू करना चाहिए? एएसपी.नेट-एमवीसी, डब्ल्यूसीएफ?

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

मैं जिस अन्य विकल्प के बारे में सोच रहा हूं वह एएसपी.नेट एमवीसी का उपयोग कर रहा है, कुछ कस्टम मार्ग जोड़ रहा है, कुछ नियंत्रक क्रियाएं जोड़ता है और जेएसओएन, एक्सएमएल और अन्य रिटर्न प्रकारों को धक्का देने के लिए विभिन्न विचारों का उपयोग कर रहा है।

यह प्रोजेक्ट ज्यादातर मेरे लिए एक सीखने का अभ्यास है, और मैं कुछ अतिरिक्त समय बिताना चाहता हूं और इसे "सही" करना चाहता हूं, इसलिए मेरे पास एक बेहतर काम है कि टुकड़े कैसे फिट होते हैं।

तो मेरा सवाल यह है कि, इस दृष्टिकोण को बनाने के लिए मुझे किस दृष्टिकोण का उपयोग करना चाहिए, और इस तरह से ऐसा करने के कुछ फायदे क्या हैं?

उत्तर

8

आम तौर पर, मैं किसी भी तरह के होस्टेड सेरीस के लिए डब्ल्यूसीएफ कहूंगा, लेकिन जेएसओएन का उपयोग सीरियलाइजेशन तंत्र के रूप में रीस्टफुल सेवाओं के लिए विशिष्ट मामले में, मैं एएसपी.नेट एमवीसी (जिसे मैं एएसपी.नेट के रूप में संदर्भित करता हूं) इस उत्तर का शेष)।

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

इसके अलावा, ऊपर दिए गए बिंदु पर, यदि आपके पास डब्ल्यूसीएफ में कई इंटरफेस पर कई सेवाओं का खुलासा हुआ है, तो आपकी यूआरएल संरचना (जो महत्वपूर्ण है) की पूरी छवि प्राप्त करना मुश्किल है, जबकि एएसपी.नेट में आपको (आमतौर पर) एक ही स्थान पर सभी मार्ग असाइनमेंट।

एएसपी.नेट के बारे में दूसरी बात यह है कि आपको उन सभी आंतरिक वस्तुओं तक पहुंच प्राप्त होगी जिनके लिए एएसपी.नेट (अनुरोध, प्रतिक्रिया, सर्वर, इत्यादि) के लिए जाना जाता है, जो एक खुलासा करते समय आवश्यक है HTTP-विशिष्ट एंडपॉइंट (जो आप बना रहे हैं)। अनुमोदित, आप डब्ल्यूसीएफ में इन चीजों में से कई का उपयोग कर सकते हैं, लेकिन आपको विशेष रूप से डब्ल्यूसीएफ को यह बताना होगा कि आप ऐसा कर रहे हैं, और फिर अपनी सेवाओं को दिमाग में डिजाइन करें।

अंत में, व्यक्तिगत अनुभव के माध्यम से, मैं पाया है कि DataContractJsonSerializer बहुत अच्छी तरह DateTimeOffset मानों का प्रबंधन नहीं है, और यह प्रकार है कि आप जब एक सेवा के साथ काम (किसी भी अंत बिंदु से अधिक) DateTime से अधिक का उपयोग करना चाहिए जो किया जा सकता है कई टाइमज़ोन पर लोगों द्वारा बुलाया जाता है। एएसपी.नेट में, एक अलग सीरिएलाइज़र है जिसका आप उपयोग कर सकते हैं, या यदि आप चाहते हैं, तो आप अपना खुद का ActionResult बना सकते हैं जो आपके लिए कस्टम सीरिएलाइज़र का उपयोग करता है। मैं व्यक्तिगत रूप से JSON.Net serializer पसंद करता हूं।

JSON.Net serializer और ASP.NET के बारे में अच्छी चीजों में से एक जो मुझे पसंद है कि आप स्मार्ट हैं, तो आप इसके साथ गुमनाम प्रकारों का उपयोग कर सकते हैं। यदि आप एक गैर-जेनेरिक प्रकार पर एक स्थैतिक जेनेरिक विधि बनाते हैं जो तब एक आंतरिक जेनेरिक प्रकार के लिए प्रतिनिधि करता है, तो आप अपने धारावाहिक वापसी मूल्यों के लिए अनाम प्रकारों का आसानी से उपयोग करने के लिए प्रकार अनुमान का उपयोग कर सकते हैं (माना जाता है कि वे एक-ऑफ हैं, निश्चित रूप से, यदि आप एक संरचना है जो लगातार लौटा दी जाती है, आपको इसे परिभाषित करना चाहिए और इसका उपयोग करना चाहिए)।

यह भी उल्लेख किया जाना चाहिए कि एक विश्वसनीय सेवा विकसित करने पर आपको डब्ल्यूसीएफ को पूरी तरह से छूट नहीं देना है। यदि आप अपनी सेवा से एटीओएम या आरएसएस फ़ीड को धक्का दे रहे हैं तो System.ServiceModel.Syndication में बड़े पैमाने पर नामों की कक्षाएं उन फ़ीड के निर्माण और क्रमिकरण में सहायता करती हैं।ActionResult वर्ग का एक सरल सबक्लास बनाना SyndicationFeed का उदाहरण लेने के लिए और फिर ActionResult निष्पादित होने पर इसे आउटपुट स्ट्रीम में क्रमबद्ध करें।

+1

मैं मूल प्रश्न के लिए अपनी असंबंधित एहसास, लेकिन क्या आप डेटटाइम ऑफसेट और JSON क्रमबद्धता के साथ देखे गए मुद्दों के बारे में अधिक जानकारी प्राप्त कर सकते हैं? – Nate

+0

@Nate: मैं इसे एक अलग प्रश्न के रूप में पूछने की सिफारिश करता हूं; आप जो अंतर देखते हैं उन्हें देखें, और फिर उन अंतरों के बारे में एक प्रश्न पोस्ट करें जहां आप उन्हें देखते हैं। – casperOne

1

व्यक्तिगत रूप से, मैं डब्ल्यूसीएफ में आरईएसटी सेवाओं को लागू करने के बारे में पागल नहीं हूं। मुझे एएसपीनेट एमवीसी फ्रेमवर्क इस के लिए एक और प्राकृतिक प्रोग्रामिंग मॉडल मिल गया है।

http://atomsite.net/ के कार्यान्वयनकर्ता ने मूल रूप से डब्ल्यूसीएफ में एटॉम्पब विनिर्देश लागू किया और फिर एएसपीनेट एमवीसी का उपयोग करके पूरी सेवा को फिर से लिख दिया। उनके अनुभव ने मेरी टिप्पणी को प्रतिबिंबित किया कि एक शुद्ध रीस्ट सेवा के लिए asp.net mvc जाने का तरीका है।

एकमात्र अपवाद होगा यदि मैं संभावित रूप से एक आरामदायक और अस्वस्थ तरीके से सेवा का पर्दाफाश करना चाहता हूं। या अगर मैं आरईएसटी के माध्यम से मौजूदा डब्ल्यूसीएफ सेवा का खुलासा कर रहा था।

4

यहां एक ऐसा विचार है जो आपको एएसपी.नेट एमवीसी और डब्ल्यूसीएफ के बीच निर्णय लेने में मदद कर सकता है। परिदृश्यों में आप वर्णन करते हैं, क्या आपको HTTP के अलावा प्रोटोकॉल का उपयोग करने की आवश्यकता है?

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

एएसपी.नेट एमवीसी स्वाभाविक रूप से एक एचटीपी आधारित ढांचा है। यह HTTP क्रियाएं, मीडिया प्रकार, यूआरएल, प्रतिक्रिया शीर्षलेख और अनुरोध शीर्षलेख से संबंधित है।

सवाल यह है कि कौन सा मॉडल आप बनाने की कोशिश कर रहे हैं उसके करीब है?

अब आपने आरईएसटी का उल्लेख किया है। यदि आप वास्तव में रीस्ट बाधाओं के बाद अपने वितरित अनुप्रयोगों को बनाना चाहते हैं तो आप OpenRasta से शुरू करना बेहतर होगा। यह आपको उस रास्ते से मार्गदर्शन करेगा।

आप ASP.Net MVC में आराम कर सकते हैं और आप WCF में कर सकते हैं, लेकिन उन समाधान के साथ, आप सफलता के गड्ढे में गिर जाएगी ;-)

+0

मैंने ओपनरास्टा के बारे में कभी नहीं सुना है - क्या आपके पास इसके बारे में कोई अतिरिक्त जानकारी है? इसके अलावा, HTTP और/या HTTPS इस में उपयोग किया जाने वाला एकमात्र प्रोटोकॉल होगा, क्योंकि मैं प्लेटफ़ॉर्म की विस्तृत श्रृंखला पर "क्लाइंट" विकसित करूँगा। – Nate

+0

आपको यहां मुख्य परियोजना मिल जाएगी http://trac.caffeine-it.com/openrasta/ serialseb परियोजना पर मुख्य देवता है और यहां लगातार योगदानकर्ता है। यदि आप मिक्स 10 की जांच करते हैं, तो ओपनरास्टा पर बात आरईएसटी श्रेणी के तहत एकमात्र है http://live.visitmix.com/Sessions#/tags/REST –

+0

एक वास्तविक सरल परियोजना के लिए, ओपनस्ट्रा बनाम ओवरकिल बनाम कुछ एएसपी की तरह होगा .NET एमवीसी? मैं पहले से ही एएसपीएनटी एमवीसी और डब्ल्यूसीएफ दोनों के साथ काफी आरामदायक हूं, और मुझे यकीन नहीं है कि इस बिंदु पर मेरे लिए एक बिल्कुल नया ढांचा/टूलकिट सीखना फायदेमंद है। विचार? – Nate

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