WCF बनाम ASP.NET वेब एपीआई [बंद]


484

मैंने WCF के पीछे की अवधारणाओं को समझने की कोशिश करते हुए कुछ महीने बिताए हैं और हाल ही में मैंने अपना पहला WCF सेवा एप्लिकेशन विकसित किया है।

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

दूसरे दिन मुझे पता चला कि Microsoft ASP.NET वेब एपीआई नामक एक नई चीज़ के साथ आया है ।

जो मैं पढ़ सकता हूं, वह एक RESTful फ्रेमवर्क है , जिसका उपयोग करना और लागू करना बहुत आसान है।

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

क्या कोई व्यक्ति, कृपया, प्रत्येक के अंतर और उपयोग को समझने में मेरी मदद कर सकता है?


12
+1 दिलचस्प सवाल। हो सकता है कि आपको programmers.stackexchange.com
मिलेंगी

1
"पुराने" WCF की कौन सी विशेषताएं आप उपयोग कर रहे हैं? क्या आप एक RESTful API बनाने का प्रयास कर रहे हैं? या RPC, या SOAP?
मार्शंड

1
@marcind: आपके उत्तर के लिए धन्यवाद। यह ज्यादातर Restful कॉल है। कोई आरपीसी बिल्कुल नहीं।
लेफ्टीएक्स

4
एक और अच्छा जवाब stackoverflow.com/a/9859981/456814

1
दोनों एक और एक ही चीज हैं लेकिन पुराना अंतर जो एक के पार आ सकता है वह होगा मूल रूप से इंटरनेट के लिए इंट्रानेट और वेबैपि के लिए, हाँ निश्चित रूप से हम wcf को भी आराम दे सकते हैं! मूल रूप से दोनों http प्रोटोकॉल web.http
LostCoder

जवाबों:


185

नया ASP.NET वेब एपीआई पिछले WCF वेब एपीआई परियोजना की एक निरंतरता है (हालांकि कुछ अवधारणाएं बदल गई हैं )।

WCF मूल रूप से SOAP- आधारित सेवाओं को सक्षम करने के लिए बनाया गया था। सरल RESTful या RPCish सेवाओं के लिए (लगता है कि jQuery जैसे ग्राहक) ASP.NET वेब एपीआई अच्छा विकल्प होना चाहिए।


36
यह भी: हालांकि WCF REST-style सेवाओं को लिखने के लिए कुछ सहायता प्रदान करता है, ASP.NET वेब एपीआई में REST के लिए समर्थन अधिक पूर्ण है और भविष्य के REST सुविधा में सभी सुधार ASP.NET वेब API msdn.microsoft.com/en-
ओहाड श्नाइडर

6
दरअसल WCF मूल रूप से SOAP या RPC सेवा और क्लाइंट के बीच एक अमूर्त परत को लागू करने के लिए बनाया गया था। यह बिंदु इन दोनों अलग-अलग कॉलों के चारों ओर एक एकल वास्तुकला (एबीसी) बनाने और कॉन्फ़िगरेशन फ़ाइलों के माध्यम से नलसाजी को संभालने के लिए था।
स्कॉट मार्कस 14

4
ASP.NET वेब एपीआई के साथ वास्तविक दोष यह ग्राहक टूलींग है। विजुअल स्टूडियो सहज WCF सेवा क्लाइंट संस्थाओं और सेवा उत्पादन का समर्थन करने के लिए एकीकृत उपकरणों का समर्थन करता है। वेब एपीआई में कोई समर्थन नहीं। मुझे पता है कि वहाँ है HttpClientजो भयानक है, लेकिन यह इकाई पीढ़ी और क्रमांकन / deserialization का ख्याल नहीं रखता है।
शमी वेइटहैंडलर

1
@ शमी स्वैगर का उपयोग कर सेवा निर्माण के बारे में क्या?
एलेक्स78191

1
आपकी प्रतिक्रिया के लिए @ एलेक्स78191 धन्यवाद। क्या उत्पन्न संस्थाएँ INotifyPropertyChangedग्राहक संस्थाओं का उत्सर्जन कर सकती हैं ? कैसे मान्यता के बारे में?
शिमी वेइटहैंडलर

250

हमारे लिए, WCF का उपयोग SOAP और Web API के लिए REST के लिए किया जाता है। मैं चाहता हूँ कि वेब एपीआई ने SOAP का भी समर्थन किया। हम डब्ल्यूसीएफ की उन्नत सुविधाओं का उपयोग नहीं कर रहे हैं। यहाँ MSDN से तुलना है :

यहाँ छवि विवरण दर्ज करें


1
और वेब एपीआई OData का समर्थन करता है जो CSOM के लिए एक Godsend है।
abbaf33f

12
यह आश्चर्यजनक है कि एमएस इतना कुछ के साथ वास्तव में योग्य कुछ भी नहीं कहता है। उदाहरण के लिए, WCF JSON का समर्थन करता है, लेकिन यह जानकारी इस "तुलना" में अच्छी तरह से छिपी हुई है, जबकि यह पाठात्मक रूप से कहता है कि WebApi एक बार नहीं बल्कि दो बार JSON का समर्थन करता है।
मैगलैन्स

1
यह तालिका अर्थहीन है। "JQuery" (राजधानी J के लिए डराने वाले उद्धरण) एक प्रोटोकॉल और / या प्रारूप है?
संकरकोप

1
दिलचस्प। HTTP को ट्रांसपोर्ट प्रोटोकॉल के रूप में उल्लेख करने में MSDN गलत है। HTTP एक एप्लीकेशन लेयर प्रोटोकॉल है।
रेवेल्वेस

80

ASP.net वेब एपीआई HTTP और REST आधारित GET, POST, PUT, DELETE के बारे में अच्छी तरह से जानते हैं। ASP.net MVC प्रोग्रामिंग की शैली और JSON वापसी योग्य है; वेब एपीआई सभी हल्के वजन प्रक्रिया और शुद्ध HTTP आधारित घटकों के लिए है। डब्ल्यूसीएफ के साथ आगे बढ़ने के लिए भी सरल या सरल एकल वेब सेवा के लिए यह सभी अतिरिक्त सामान लाएगा। हल्के वजन के लिए सरल सेवा के लिए अजाक्स या डायनेमिक कॉल हमेशा WebApi सिर्फ जरूरत को हल करता है। यह बड़े करीने से ASP.NET MVC के समानांतर में मदद करता है।

पॉडकास्ट की जाँच करें : हैन्सलमिनुट्स पॉडकास्ट 264 - यह आपके पिता का WCF नहीं है - सभी अधिक जानकारी के लिए स्कॉट हैन्समैन द्वारा ग्लेन ब्लॉक के साथ वेबएपीआई के बारे में


67

नीचे सूचीबद्ध परिदृश्यों में आपको WCF के लिए जाना चाहिए:

  1. यदि आपको TCP, MSMQ या MIME जैसे प्रोटोकॉल पर डेटा भेजने की आवश्यकता है
  2. यदि उपभोग करने वाला ग्राहक सिर्फ SOAP संदेशों का उपभोग करना जानता है

WEB एपीआई RESTful / HTTP सेवाओं को विकसित करने के लिए एक रूपरेखा है।

बहुत सारे क्लाइंट हैं जो SOAP को समझ नहीं पाते हैं जैसे ब्राउजर, HTML5, उन मामलों में WEB API एक अच्छा विकल्प है।

HTTP सेवा हेडर निर्दिष्ट करता है कि सेवा को कैसे सुरक्षित किया जाए, सूचना को कैसे कैश किया जाए, संदेश का प्रकार और HTTP बॉडी किसी भी प्रकार की सामग्री को HTML जैसे XML ही नहीं SOAP सेवाओं के रूप में निर्दिष्ट कर सकते हैं।


7
यह धारणा है कि WCF केवल SOAP संदेशों को संभालता है, एक गलत धारणा है। आप WCF सेवाओं पर REST के समापन बिंदुओं को भी उजागर कर सकते हैं। मैं यह कहने के लिए इसे संशोधित करूंगा, अगर आप WCF की सुविधाओं का उपयोग नहीं करने जा रहे हैं (देखें ट्रिडी का संदेश) तो वेब एपीआई समझ में आता है।
माइक

3
Yep WCF आराम भी करता है .. मूल रूप से Web api WCFs कार्यक्षमता का एक सबसेट है, जो कि उचित है अगर आपका साधारण CRUD स्टाइल डेटा ऐप है।
user1496062

41

अब तक दोनों का उपयोग करने के बाद, मैंने WCF और वेब एपीआई के बीच कई अंतर पाए हैं। दोनों प्रौद्योगिकी स्टैक विभिन्न परिदृश्यों के अनुकूल हैं, इसलिए यह कहना संभव नहीं है कि कौन सा बेहतर है, यह कॉन्फ़िगरेशन और परिदृश्य पर निर्भर करता है।

Properties              ASP.Net Web API                         WCF
--------------------------------------------------------------------------------------------------
End point (mainly)      Http based                              SOAP based
Service Type            Front End                               Back-end
Support                 caching, compression, versioning        No
Framework               ASP.net                                 WCF
Orientation             Resource Oriented                       Service Oriented
Transports              http                                    http, tcp, MSMQ, Named pipe
Message pattern         Request reply                           request Reply, one way, duplex
Configuration overhead  Less                                    Much
Security                lesser than WCF (web standard security) Very high (WS-I standard)
Hosting                 IIS                                     IIS, Windows Service, Self hosting
Performance             Fast                                    A bit slower than Web API
In use from             .NET 4.0                                .NET 3.5

नोट: डेटा केवल मेरा विचार नहीं है, इसे अन्य आधिकारिक वेबसाइटों से भी एकत्र किया गया है।


12
वेब सेवा एपीआई को स्वयं (ओउन / कटाना) के साथ-साथ एक विंडोज सेवा में भी होस्ट किया जा सकता है
मोनिस इकबाल

HTML के बजाय छवि का उपयोग करके तालिका बनाने के लिए माइनस 1 क्योंकि यह सुधार के लिए उत्तर को संपादित करने से रोकता है।
अहसान अहमद

34

WCF आपको बॉक्स से बाहर कर देगा, यह किसी भी चीज से तुलना करने योग्य नहीं है। जब तक आप अपने खुद के कार्यान्वयन पर (कुछ नाम रखने के लिए) प्रमाणीकरण, प्राधिकरण, एन्क्रिप्शन, कतारबद्ध, थ्रॉटलिंग, विश्वसनीय संदेश, लॉगिंग, सत्र और इतने पर करना चाहते हैं। WCF [केवल] वेब सेवाएं नहीं है; WCF SOA के लिए एक विकास मंच है।


11
यदि मैं गलत नहीं हूं, तो मुझे लगता है कि WEB API आपके द्वारा सूचीबद्ध अधिकांश फ़ंक्शन भी प्रदान करता है।
एलेक्स

4
कोई वेब एप इन चीजों को प्रदान नहीं करता है या बहुत सरल संस्करण प्रदान करता है।
user1496062

3
खैर यह क्या है - क्या यह उन्हें प्रदान करता है या नहीं?

5
प्रमाणीकरण और प्राधिकरण के लिए, asp.net/web-api/overview/security/… की जाँच करें । tl; dr: यह IIS में निश्चित रूप से इसका समर्थन करता है। एन्क्रिप्शन के लिए, आपको संभवतः SSL का उपयोग करने की आवश्यकता होगी, ASP.NET स्वाभाविक रूप से कतार को संभालता है (लेकिन यह सीधे वर्कर्स थ्रेड्स बनाम आने वाले अनुरोधों पर आधारित है)। सत्र मौजूद हैं (लेकिन मैं सीधे सत्र का उपयोग करने की अनुशंसा नहीं करूंगा)। लॉगिंग स्थापित करने के लिए पर्याप्त है (एक्शनफिल्टर या इस तरह के माध्यम से)। विश्वसनीय मैसेजिंग का एक विकल्प सिग्नलआर (हालांकि बिल्कुल नहीं) का उपयोग कर रहा है।
जेम्स हौग

7
"किसी भी चीज की तुलना नहीं" ?? संभावना नहीं है।
15

16

मैं क्यों जवाब दे रहा हूं:

मुझे इन दोनों प्रौद्योगिकियों के बीच अंतर को समझने में बहुत समय लगा। मैं उन सभी बिंदुओं को यहां रखूंगा जो मुझे लगता है कि "अगर मेरे पास इन बिंदुओं की तलाश में उस समय था, जब मैं इस बारे में सोच रहा था, तो मैंने अपनी आवश्यक तकनीक का चयन करने का निर्णय पहले ही कर लिया है।"

सूचना का स्रोत:

Microsoft® Visual Studio® 2015 अनलेशेड

आईएसबीएन -13: 978-0-672-33736-9 आईएसबीएन -10: 0-672-33736-3

क्यों ASP.NET वेब एपीआई और WCF:

ASP.NET वेब एपीआई और WCF की प्रौद्योगिकियों की तुलना करने से पहले, यह समझना महत्वपूर्ण है कि वेब सेवाओं को बनाने के लिए वास्तव में दो शैलियों / मानक हैं: REST (प्रतिनिधि राज्य स्थानांतरण) और SOAP / WSDL। SOAP / WSDL मूल मानक था जिस पर वेब सेवाएँ निर्मित की गई थीं। हालांकि, इसका उपयोग करना कठिन था और इसमें भारी संदेश प्रारूप (जैसे एक्सएमएल) था जिसने प्रदर्शन को कम कर दिया था। REST- आधारित सेवाएँ जल्दी ही विकल्प बन गईं। वे लिखना आसान है क्योंकि वे HTTP (GET, POST, PUT, DELETE) के बुनियादी निर्माणों का लाभ उठाते हैं और आमतौर पर छोटे संदेश स्वरूपों (जैसे JSON) का उपयोग करते हैं। परिणामस्वरूप, REST- आधारित HTTP सेवाएँ अब लेखन सेवाओं के लिए मानक हैं जो वेब को सख्ती से लक्षित करती हैं।

आइए ASP.NET वेब एपीआई के उद्देश्य को परिभाषित करें

ASP.NET वेब एपीआई REST- आधारित HTTP वेब सेवाओं को विकसित करने के लिए Microsoft की तकनीक है। (यह बहुत पहले Microsoft के ASMX की जगह ले चुका था, जो SOAP / WSDL पर आधारित था।) वेब एपीआई HTTP प्रोटोकॉल पर आधारित मजबूत सेवाओं को लिखना आसान बनाता है, जो सभी ब्राउज़र और देशी उपकरण समझते हैं। यह आपको अपने एप्लिकेशन का समर्थन करने और अन्य वेब एप्लिकेशन, टैबलेट, मोबाइल फोन, पीसी और गेमिंग कंसोल से कॉल करने के लिए सेवाएं बनाने में सक्षम बनाता है। कभी-कभी मौजूद वेब कनेक्शन का लाभ उठाने के लिए लिखे गए अधिकांश एप्लिकेशन किसी तरह से HTTP सेवाओं का उपयोग करते हैं।

आइए अब WCF के उद्देश्य को परिभाषित करते हैं:

इंटरनेट पर संचार करना हमेशा सबसे कुशल साधन नहीं है। उदाहरण के लिए, यदि क्लाइंट और सेवा दोनों एक ही तकनीक (या यहां तक ​​कि एक ही मशीन) पर मौजूद हैं, तो वे अक्सर संवाद करने के लिए एक अधिक कुशल साधन (जैसे टीसीपी / आईपी) पर बातचीत कर सकते हैं। सेवा डेवलपर्स ने खुद को वही विकल्प बनाने के लिए पाया जिससे वे बचने की कोशिश कर रहे थे। उन्हें अब कुशल आंतरिक सेवाओं को बनाने और इंटरनेट पर व्यापक पहुंच पाने में सक्षम होने के बीच चयन करना होगा। और, अगर उन्हें दोनों का समर्थन करना था, तो उन्हें अपनी सेवा के कई संस्करण बनाने पड़ सकते हैं या अपनी सेवा तक पहुँचने के लिए कम से कम अलग-अलग परदे के पीछे रहना होगा। यह समस्या Microsoft द्वारा WCF के साथ हल की गई है

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

डब्ल्यूसीएफ का उदाहरण:

उदाहरण पर विचार करें:

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

यह कैसे WCF विभिन्न ग्राहकों की सेवा करता है

निष्कर्ष:

i) वेब एपीआई कब चुनें:

इस बात से कोई इंकार नहीं है कि ASP.NET Web API का उपयोग करके बनाई गई REST- आधारित HTTP सेवाएं वेब सेवाओं के निर्माण के लिए मानक बन गई हैं। ये सेवाएं वेब डेवलपर्स निर्माण सेवाओं के लिए एक आसान, सरल दृष्टिकोण प्रदान करती हैं। वेब डेवलपर्स HTTP GET और POST को समझते हैं और इस प्रकार इस प्रकार की सेवाओं के लिए अच्छी तरह से अनुकूल होते हैं। इसलिए, यदि आप HTTP पर लक्षित सेवाओं को सख्ती से लिख रहे हैं, तो ASP.NET वेब एपीआई तार्किक विकल्प है।

ii) डब्ल्यूसीएफ कब चुनना है:

WCF तकनीक तब उपयोगी होती है जब आपको विभिन्न प्रोटोकॉल और संदेश प्रारूपों के आधार पर कई सर्विस एंडपॉइंट्स का समर्थन करने की आवश्यकता होती है। Microsoft BizTalk जैसे उत्पाद मजबूत सेवाओं को बनाने के लिए WCF का लाभ उठाते हैं जो वेब के साथ-साथ विभिन्न मशीन-टू-मशीन कॉन्फ़िगरेशन के माध्यम से उपयोग किए जा सकते हैं। हालांकि, आपको स्थानीय से कनेक्ट होने पर टीसीपी / आईपी पर संचार करने वाले एप्लिकेशन को लिखना होगा। नेटवर्क और HTTP पर काम करता है जब नेटवर्क के बाहर, WCF आपका जवाब है

चेतावनी दी:

वेब डेवलपर अक्सर WCF को विकसित करने के लिए अधिक कठिन और जटिल के रूप में देखते हैं। इसलिए, यदि आप मल्टीप्रोटेकोल सेवाओं की आवश्यकता का पूर्वाभास नहीं करते हैं, तो आप संभवतः ASP.NET वेब एपीआई से चिपके रहेंगे।


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

12

इस बारे में MSDN पर एक तुलना है

WCF और ASP.NET वेब एपीआई

मेरे लिए, पसंद यह था कि ग्राहक कौन हैं और वे कहाँ स्थित हैं?

कंपनी नेटवर्क और .NET आधारित क्लाइंट के भीतर: टीसीपी बाइंडिंग के साथ WCF का उपयोग करें (HTTP से तेज़ संचार)

कंपनी नेटवर्क के बाहर, और PHP, Python आदि जैसे विभिन्न तकनीकों का उपयोग करें: REST के साथ वेब API का उपयोग करें


9

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

वेबपी का समर्थक डब्ल्यूसीएफ की तुलना में अधिक हल्का है।


3
WCF == WS- *, webapi == REST
BozoJoe

7

"WebApi में WSDL की कमी" कथन के बारे में रेस्ट क्लाइंट उत्पन्न करने के कई तरीके हैं। एक लोकप्रिय दृष्टिकोण है स्वैगर यूआई / (स्वशबुकले नुगेट)। यह REST एंड पॉइंट के इनपुट और आउटपुट स्कीमा और ऑनलाइन टूल को समझने के लिए एक अमीर इंटरफ़ेस देता है।

JSON LD (Json Linked Documents) एक और उभरता हुआ मानक है जो JSON स्कीमा को बेहतर शब्दार्थ के साथ उजागर करके JSON आधारित REST डेवलपर अनुभव को और बेहतर बनाएगा।


1

Wcf के साथ हम कई एंडपॉइंट्स जैसे tcp, http.if के लिए एक ही सर्विस सपोर्ट को कॉन्फ़िगर और एक्सपोज कर सकते हैं। आप चाहते हैं कि आपकी सर्विस केवल http आधारित हो तो वेब एपीआई के साथ जाना बेहतर होगा। Wcf की तुलना में Web API का विन्यास बहुत कम होता है और यह wcf से थोड़ा तेज होता है। Wcf भी आरामदायक सेवाओं का समर्थन करता है। अगर आपके पास .Net फ्रेमवर्क 3.5 की सीमा है तो आपका विकल्प wcf है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.