2010-01-23 16 views
12

वर्तमान प्रोजेक्ट जो मैं काम कर रहा हूं वह व्यापक रूप से वेब सेवाओं का उपयोग कर रहा है और नेट 3.5 में बनाया गया है। अब जब हम दूसरे चरण के कार्यान्वयन के लिए जा रहे हैं तो हम उलझन में हैं अगर हमें या तो डब्ल्यूसीएफ या वेब सेवा का इस्तेमाल पहले किया जाना चाहिए? आगे कुछ भी नया है जो उपयोगी हो सकता है और वेब सेवाओं या डब्ल्यूसीएफ के संबंध में .NET 4.0 के साथ आ रहा है।क्या चुनना है? .NET 3.5 में एएसएमएक्स वेब सेवा या डब्ल्यूसीएफ?

उत्तर

26

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

त्वरित लाभ हम से अधिक ASMX प्राप्त की:

1) आंतरिक (फ़ायरवॉल के पीछे) सेवा करने वाली सेवा कॉल हम शुद्ध उपयोग करें: टीसीपी बाइंडिंग, जो साबुन की तुलना में बहुत तेजी से होता है

2) हमने एक नेट पर टीसीपी एंडपॉइंट और एक "वेब" एंडपॉइंट को केवल एक कॉन्फ़िगरेशन फ़ाइल अपडेट (कोई कोड परिवर्तन नहीं)

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

4) चूंकि हमारी साइट को प्रदर्शन अनुकूलन और स्थिरता के लिए स्केल करने की आवश्यकता है, इसलिए हम एक एमएसएमक्यू-आधारित मैसेजिंग संरचना का उपयोग करने के लिए परिवर्तित हो रहे हैं जो असीमित और गारंटीकृत है और लेनदेन में भाग लेता है; डब्ल्यूसीएफ एक एमएसएमक्यू बाइंडिंग प्रदान करता है जिसके लिए हमारी सेवाओं में कम-से-कम कोड परिवर्तन की आवश्यकता होती है - केवल मौजूदा अपडेट के साथ संदर्भ अपडेट और एमएसएमक्यू की स्थापना करना (और लेनदेन सीमाओं के लिए विशेषताओं को जोड़ना)।

लेकिन सावधान रहें: वास्तव में इस सीखने में निवेश करें (नीली ओ-रेली पुस्तक खरीदें और इसके माध्यम से जाएं)। ऐसे विकास के दौरान तर्क-नाम-परिवर्तन जैसी चीजें हैं जो वास्तव में सेवा संदर्भों को तोड़ती नहीं हैं, लेकिन परिणामस्वरूप शून्य तर्क (अंतर्निहित संस्करण स्की हैंडलिंग) हो रहा है, मॉडल पर विचार करने के लिए होस्टिंग (विंडोज़ सेवा बनाम आईआईएस), और तत्काल सभी वास्तव में समझने के लिए मॉडल और FaultExceptions। हम अंदर नहीं गए और हमें कुछ दर्द था। लेकिन हमने आगे बढ़े और हमारी शिक्षाओं और लचीलापन और विकास के अवसरों से बहुत खुश हैं जिन्हें हम अब एएसएमएक्स से बंधे नहीं हैं!

+1

टोनी प्रयासों के लायक अद्यतन है ... मेरा मतलब है कि आप एएसएमएक्स से डब्ल्यूसीएफ में स्विच करते समय काफी प्रदर्शन, कार्यक्षमता और लचीलापन वृद्धि देखते हैं? – HotTester

+1

+1 अच्छे अंक टोनी – Perpetualcoder

+0

यहां प्रदर्शन के बारे में कुछ और जानकारी: http://msdn.microsoft.com/en-us/library/bb310550.aspx – magnus

3

विभिन्न बिंदुओं WCF करने पर कूदने से पहले विचार करने के लिए कर रहे हैं:

  1. WCF वास्तुकला और अधिक मजबूत है और सर्वोत्तम प्रथाओं को बढ़ावा देता है।
  2. यदि आप जानते हैं कि आप "रेशमी चिकनी" क्या कर रहे हैं, तो यदि आप सवारी के लिए नहीं हैं।
  3. क्या आपके पास अपनी सेवाओं के रूपांतरण को पूरा करने के लिए पर्याप्त समय है?

अंत में मैं कहूँगा कि, अगर आप समय है, bling और मांसपेशियों उन्नयन करना है। यह इसके लायक है। अगर एएसएमएक्स सभी जरूरतों को पूरा कर रहा है, तो आप वेब सेवाओं के साथ जारी रह सकते हैं।

3

दो आगे पहलुओं:

  1. कोई फर्क नहीं पड़ता कि कैसे आप सर्वर साइड के लिए इस निर्णय लेते हैं, तो आप आसानी से Webservices उपभोग कर सकते हैं और WCF सेवा क्लाइंट-साइड पर केवल का उपयोग कर WCF। यह मूल्य है, यदि आप एक ग्राहक के साथ कई सेवाओं का उपभोग करते हैं।

  2. आपने आगामी विषयों के लिए कहा। यदि आप क्लाउड कंप्यूटिंग पर विचार करते हैं: विंडोज़ एज़ूर पर डब्ल्यूसीएफ सेवाओं को होस्ट करना संभव है।

11

ASMX महान और सरल है - लेकिन यह बहुत कई मायनों में सीमित है:

  • आप केवल IIS में अपने वेब सेवाओं की मेजबानी
  • आप केवल HTTP
  • पर अपने वेब सेवाओं तक पहुँच सकते हैं कर सकते हैं
  • सुरक्षा बहुत सीमित है

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

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

resoures के लिए के रूप में: MSDN WCF Developer Center जो लेख और नमूना कोड की आरंभिक ट्यूटोरियल से सब कुछ है नहीं है।

इसके अलावा, मैं आप की सिफारिश करेंगे Pluralsight screen casts on WCF पर एक नजर है - यह एक उत्कृष्ट श्रृंखला "Creating your first WCF service" और "Creating your first WCF client" से सभी तरह से करने के लिए नहीं बल्कि उन्नत विषयों के लिए जा रहा है। हारून स्कोनार्ड 10-15 मिनट स्क्रीनकास्ट में सब कुछ अच्छी तरह से समझाता है - अत्यधिक अनुशंसित! ScriptManager टैग:

3
या तो WCF या ASMX साथ

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

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
    <Services> 
     <asp:ServiceReference Path="~/WebServices/Admin/HospitalLocationService.asmx" InlineScript="true" /> 
    </Services> 
</asp:ScriptManager> 

इसके अलावा, आप ASMX ScriptService और ScriptMethod जोड़कर JSON भेज कर सकते हैं विशेषताएं:

<System.Web.Services.WebService(Namespace:="http://www.fujimed.com/")> _ 
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ 
<ToolboxItem(False)> _ 
<ScriptService()> _ 
Public Class HospitalLocationService 
    Inherits System.Web.Services.WebService 

    <WebMethod()> _ 
    <ScriptMethod()> _ 
    Public Function GetAll() As List(Of HospitalLocationEntity) 
     Return (New HospitalLocation()).GetAll().Data 
    End Function 

    <WebMethod()> _ 
    <ScriptMethod()> _ 
    Public Function GetByID(ByVal ID As Integer) As HospitalLocationEntity 
     Return (New HospitalLocation()).GetHospitalLocation(ID).Data 
    End Function 

End Class 

सेवा उपभोक्ता, पार्स करने के बिना (यह क्या ScriptManager आप के लिए करता है):

function editLocation(id) { 
    vRIS.HospitalLocationService.GetByID(id, getComplete, getError); 
} 

function getComplete(results, context, methodName) { 
    document.all['txtLocation'].value = results.Location; 
    document.all['txtInterfaceID'].value = results.InterfaceID; 
    document.all['selActive'].value = results.Active ? "true" : "false"; 
    document.all['hdnLocationID'].value = results.ID.toString(); 
} 

function getError(errorInfo, context, methodName) { 
    Alert(methodName + " : " + errorInfo); 
    document.all['txtLocation'].value = ""; 
    document.all['txtInterfaceID'].value = ""; 
    document.all['selActive'].value = "false"; 
    document.all['hdnLocationID'].value = ""; 
} 

संपादित जोड़ने के लिए: के साथ सब से ऊपर ASMX के आधार पर, मैं अभी भी, WCF जाना चाहते हैं बहुमुखी प्रतिभा के लिए और डेटा अनुबंध को परिभाषित करने की क्षमता के लिए। इसके अलावा, डब्ल्यूसीएफ आरआईए सेवाओं की जांच; वे AJAX के साथ ही सिल्वरलाइट के लिए समर्थन को लक्षित कर रहे हैं, और यह डब्ल्यूसीएफ की अधिकांश कॉन्फ़िगरेशन को स्वचालित करता है।

4

WCF मॉडल बेहद अधिक लचीला है, अनिवार्य है - अगर आप केवल इसका इस्तेमाल बुनियादी प्रोफाइल व एक्सएमएल, प्रॉक्सी वस्तुओं के साथ का उपयोग कर एक बुनियादी http मॉडल पेश करने के लिए - यह बहुत समान दिखाई देंगे।

हालांकि मतभेद का एक संक्षिप्त सूची:

  • मानकों
  • MTOM इनबिल्ट (हालांकि WSE2 और WSE3 ASMX के लिए उपलब्ध हैं, यह सब बहुत WCF में सरल है) उभरते के लिए काफी बेहतर समर्थन (और एक ठीक करता है ज्ञात बग जो मुझे एमटीओएम के साथ डब्लूएसई 3 में खोजना याद है)
  • समर्थित ट्रांसपोर्ट/प्रोटोकॉल इत्यादि की विस्तृत श्रृंखला, और व्यवहार पूरी तरह कॉन्फ़िगर करने योग्य/एक्स्टेंसिबल हैं; उदाहरण आप एक कस्टम serializer/प्रोटोकॉल/परिवहन का उपयोग करने की अनुमति देने के/आदि seemlessly, बस config और रनटाइम पर config
  • अधिक बेहतर विन्यास, दोनों बदलकर
  • निरीक्षकों और कस्टम प्रिंसिपलों
  • साझा करने की क्षमता के लिए पूर्ण समर्थन ऑब्जेक्ट-मॉडल यदि आप
  • चाहते हैं तो आप इसे वेब-सर्वर के बाहर होस्ट कर सकते हैं; एक कंसोल exe या सेवा, उदाहरण के लिए
संबंधित मुद्दे