2010-02-03 12 views
16

मुझे पता चला है कि मैं एक एसओएपी/डब्लूएसडीएल सेवा आयात कर सकता हूं जिसे मैं अपने समाधान में "वेब सेवा संदर्भ" के रूप में उपयोग करने की योजना बना रहा हूं (System.Web.Services) या "सेवा संदर्भ" (System.ServiceModel/WCF) के रूप में।विजुअल स्टूडियो/एसओएपी - 'सेवा संदर्भ जोड़ें' बनाम 'वेब सेवा संदर्भ जोड़ें'

मैं सोच रहा था कि मतभेद क्या थे। मैं समझता हूं कि 'सेवा संदर्भ जोड़ें'/डब्ल्यूसीएफ नया है, क्या सिस्टम.बैब सर्विसेज पर इसका उपयोग करने के लिए कोई नुकसान है या अब यह .NET में एसओएपी सेवाओं का उपभोग करने का पसंदीदा तरीका है?

उत्तर

21

पसंदीदा और सबसे उपयोगी तरीका वास्तव में Add Service Reference का उपयोग करना है। यह आपकी सेवा को डब्ल्यूसीएफ क्लाइंट साइड प्रॉक्सी के रूप में जोड़ देगा।

Add Web Reference चीजें करने की "पुरानी शैली" ASMX/ASP.NET webservice तरीका है।

WCF, ASMX की तुलना में ज्यादा बेहतर विकल्प है क्योंकि:

  • यह नये है और भविष्य में समर्थन किया जाएगा (ASMX तरह से बाहर पर है); यदि आप इसे अब जानने के लिए, यदि आप अपने प्रोटोकॉल के रूप में HTTP का उपयोग कर, यह बाद में जानने के लिए जब ASMX निश्चित रूप से
  • यह हर पहलू में और अधिक लचीलापन प्रदान करता है
  • आप केवल कभी होस्ट कर सकते हैं जो एक ASMX सेवा आईआईएस है चला गया है नहीं होगा ; आईआईएस में डब्ल्यूसीएफ की मेजबानी की जा सकती है; एक विंडोज एनटी सेवा में स्वयं होस्टेड; WCF का उपयोग कर सकते HTTP, NetTCP, MSMQ और कई और अधिक प्रोटोकॉल
  • WCF, एक बहुत अधिक सुरक्षा और अन्य सेटिंग प्रदान करता है यह कहीं अधिक शक्तिशाली

उपयोग करने के लिए हाँ, WCF के लिए वास्तव में कड़ी मेहनत होने के बारे में एक बुरा आवाज है बनाने सीखो - मुझे सच में यह सच नहीं लगता है। उन शुरुआती संसाधनों को देखें - वास्तव में बहुत उपयोगी!

+0

लिंक मार्क के लिए धन्यवाद! हमेशा अधिक जानकारी की तलाश में। :) –

+0

उन 3 pluralsight लिंक टूटा हुआ प्रतीत होता है ... – fretje

+0

@fretje: हाँ, क्षमा करें - उन्होंने अपने स्वयं के साइट पर केवल स्क्रीन पर उपलब्ध स्क्रीनकास्ट बनाने का फैसला किया ..... मैं उनको फिर से ढूंढने की कोशिश करूंगा डब्ल्यूसीएफ डेवलपर सेंटर और लिंक अपडेट करें .... पर लटका ..... –

3

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

6

मैं है कि एक मौजूदा सोप सेवा है कि J2EE में लिखा और WebSphere में होस्ट किया गया है बुला एक आवेदन दिया है।

मैंने दो कंसोल अनुप्रयोग बनाए हैं - एक सेवा को पुराने स्कूल वेब सेवा के रूप में संदर्भित करता है और दूसरा जो इसे सेवा संदर्भ के रूप में संदर्भित करता है।

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

सेवा संदर्भ कंसोल ऐप में, मुझे बहुत अधिक कॉन्फ़िगरेशन विकल्प मिलते हैं जिन्हें मैं वेब सेवा ऐप में नहीं देखता हूं। विशेष रूप से, मैं अधिकतम संदेश आकार इत्यादि सेट कर सकता हूं,

वास्तव में, सेवा संदर्भ कंसोल ऐप को ठीक से काम करने के लिए, मुझे भेजे गए सभी डेटा वापस पाने के लिए डिफ़ॉल्ट संदेश आकार बढ़ाना पड़ा विधि कॉल में से एक में।

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="ClaimSoapBinding" closeTimeout="00:01:00" openTimeout="00:01:00" 
        receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" 
        bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferSize="65536000" maxBufferPoolSize="524288" maxReceivedMessageSize="65536000" 
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
        useDefaultWebProxy="true"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <security mode="None"> 
         <transport clientCredentialType="None" proxyCredentialType="None" 
          realm="" /> 
         <message clientCredentialType="UserName" algorithmSuite="Default" /> 
        </security> 
       </binding> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://urlgoeshere/ClaimService" 
       binding="basicHttpBinding" bindingConfiguration="ClaimSoapBinding" 
       contract="ClaimService.Claim" name="ClaimService" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

मेरे पुराने स्कूल वेब सेवा कंसोल अनुप्रयोग में, मैं बिल्कुल विन्यास को बदलने के लिए नहीं था की विशाल सेट वापस पाने के लिए:

यहाँ विन्यास सेवा संदर्भ अनुप्रयोग में कैसा दिखता है डेटा वापस भेजा गया।

<configuration> 
    <configSections> 
     <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
      <section name="ServiceTesterOldSchool.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
     </sectionGroup> 
    </configSections> 
    <applicationSettings> 
     <ServiceTesterOldSchool.Properties.Settings> 
      <setting name="ServiceTesterOldSchool_ClaimService_ClaimService" 
       serializeAs="String"> 
       <value>http://urlgoeshere/ClaimService</value> 
      </setting> 
     </ServiceTesterOldSchool.Properties.Settings> 
    </applicationSettings> 
</configuration> 

यह बहुत सरल है, लेकिन विकल्प हम सेवा संदर्भ के साथ मिल का एक बहुत का अभाव है: यहाँ क्या इसके विन्यास लग रहा है की तरह है।

सेवा कॉल करने वाला वास्तविक कोड दोनों मामलों में लगभग समान है।

अपने प्रश्न का उत्तर देने के लिए, हालांकि, मुझे लगता है कि चीजों को करने के वर्तमान तरीके से चिपकना महत्वपूर्ण है। इससे पहले कि आप पुराने स्कूल वेब संदर्भ (कम से कम वीएस -2008 में) भी जोड़ सकें, इससे पहले कि माइक्रोसॉफ्ट किला आपको संवाद के दो स्तरों से गुजरने के लिए मजबूर कर देता है।

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

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

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