2010-08-16 15 views
6

यह इन विधि हस्ताक्षरों के साथ एक सार्वजनिक रूप से सामने आ रहा वेब सेवा बनाने के लिए और अधिक या कम स्वीकार्य (यानी मानक) है:वेब सेवा: एकल स्ट्रिंग पैरामीटर या जटिल प्रकार पैरामीटर

ThisMethodDoesSomething(ComplexType param) 

ThisMethodDoesSomethingElse(AnotherComplexType param) 

या इस:

ThisMethodDoesSomethingAndSomethingElse(string xml) 

जहां ऑपरेशन किया जा रहा है, एक्सएमएल स्ट्रिंग पर निर्भर करता है कि यह एक ही करता है-यह सब तरीका है? मैं हमेशा पूर्व के साथ गया हूं, लेकिन मेरा एक सहकर्मी उत्तरार्द्ध पसंद करता है और हम एक नई परियोजना शुरू करने से पहले दोनों रणनीतियों के पेशेवरों और विपक्ष का वजन करने की कोशिश कर रहे हैं। जनता के साथ काम करने के लिए और अधिक स्वीकार्य और आसान कौन सा है?

उत्तर

0

मैं पसंद करता हूं (और यह ऑपरेटिव शब्द है, पसंद है, क्योंकि इसके लिए कोई मानक नहीं है) एक जटिल XML स्ट्रिंग जो क्रिया को बताती है। आप इसे my open-source project से देख सकते हैं।

कारणों मैं इसे पसंद करते हैं में से कुछ ...

  1. आपका कार्यों एक व्याख्या की भाषा है कि फ्लेक्स कर सकते हैं कर रहे हैं।
  2. क्रियाओं को एक नेटवर्क यात्रा में जोड़ा जा सकता है।
  3. एक्सएमएल पिछले सुविधाओं को तोड़ने के दौरान फीचर सेट के विस्तार की अनुमति देता है।
  4. एक्सएमएल पदानुक्रम क्रियाओं को सर्वर-पक्ष पर कार्य करने की अनुमति देता है।
+0

उत्तर के लिए धन्यवाद। सतह पर, यह मेरे लिए गलत लगता है, जैसे: मुझे ऑब्जेक्ट करने पर मेरे प्रोग्राम में int या डबल क्यों होना चाहिए? वस्तु अधिक लचीला है, है ना? अन्य कारण मैं इस दृष्टिकोण की ओर अग्रसर नहीं हूं विधि (स्ट्रिंग) विधि (int) या विधि (अन्य प्रकार) के रूप में स्वयं-दस्तावेज के रूप में नहीं है। आपके अंक 1 और 3 समझ में आते हैं। क्या आप अंक 2 और 4 पर थोड़ा विस्तार कर सकते हैं? –

1

पूर्व में मैंने बाद वाले को पसंद किया होगा, क्योंकि मुझे यकीन नहीं था कि अगर क्रॉस प्लेटफ़ॉर्म स्थिति में, प्रत्येक SOAP क्लाइंट जटिल प्रकारों को ठीक से उपभोग करने में सक्षम होगा। तो मैंने सोचा कि एक एसओएपी कॉल, जो सिर्फ लेता है और लौटाता है (एक्सएमएल-) स्ट्रिंग्स मुझे कोई सिरदर्द नहीं देगी। इस बीच मैंने अनुभव किया कि कम से कम पहले दृष्टिकोण के साथ कोई समस्या नहीं है। नेट जावा या एक्सिस के साथ बातचीत कर रहा है और इसके विपरीत। मैं अभी भी जटिल प्रकार को जटिल बनाने के लिए देख रहा हूं।

मुझे लगता है कि ThisMethodDoesSomething() और ThisMethodDoesSomethingElse() परमाणु संचालन हैं? यदि यह मामला नहीं है (ThisMethodDoesSomethingElse() को निष्पादित करने के लिए ThisMethodDoesSomething() पर कॉल की आवश्यकता है), पहला दृष्टिकोण कोई नहीं है।

0

आपका प्रश्न मुझे पहली नज़र में मोटे अनाज बनाम ठीक दागदार इंटरफेस के सवाल की तरह लगता है। दूसरी तरफ, मुझे लगता है कि दूसरा दृष्टिकोण चरम पर मोटे अनाज ले रहा है, अगर आपको पता है कि मेरा क्या मतलब है। आप सभी प्रकार की जांच खो देते हैं। आप कार्यान्वयन को बहुत मुश्किल बनाते हैं - बैकिंग कोड के अंदर मामलों में वास्तव में यह पता लगाना होगा कि अनुरोध क्या है। विधि वापस क्या होगा? मैं अनुमान लगा रहा हूं कि क्या आप पैरामीटर के रूप में स्ट्रिंग प्राप्त कर रहे हैं, तो आप एक और स्ट्रिंग वापस कर देंगे। चूंकि यह एक स्ट्रिंग है, और मुझे लगता है कि यह एक XML दस्तावेज़ का एक स्ट्रिंग प्रतिनिधित्व है, आपको अपने बैकिंग कोड का पार्सिंग हिस्सा बनाना होगा। जैसे ही इंटरफ़ेस बड़ा हो जाता है, मुझे लगता है कि ये भगवान विधियों में बदल जाएंगे। सूची जारी है :)

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

0

मैं आमतौर पर उन संदेशों का वर्णन करने के लिए एक XML स्कीमा बनाता हूं जो मेरे इंटरफ़ेस का निर्माण करेगा। फिर, क्लासर या माइक्रोसॉफ्ट xsd.exe जैसे क्लास जेनरेटर के लिए xsd का उपयोग करके, मैं अपने कार्यान्वयन कक्षाएं बनाता हूं।

2

मैं कभी भी XML स्ट्रिंग नहीं भेजूंगा। सबसे पहले, "एक्सएमएल" "स्ट्रिंग" जैसी ही बात नहीं है। वे एक ही नियम का पालन नहीं करते हैं।किसी भी ग्राहक ऐसा ही कुछ के साथ सौदा नहीं कर सकते

public class ComplexType1 
{ 
    public int IntegerProperty {get;set;} 
    public int[] ArrayOfIntegers {get;set;} 
    public List<int> ListOfIntegers {get;set;} // Same as ArrayOfIntegers 
} 

public class ComplexType2 
{ 
    public ComplexType1 CT1 {get;set;} 
    public List<ComplexType1> LCT1 {get;set;} 
} 

सच कहूं,:

किसी भी उचित ग्राहक आदिम प्रकार और सूचियों या आदिम प्रकार की सरणियों, रिकर्सिवली (सी # सिंटेक्स) से मिलकर जटिल प्रकार स्वीकार कर सकते हैं उपरोक्त सेवानिवृत्त होने के लायक है।

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