2008-08-04 21 views
20

पर गणना मूल्यों को कैसे पास किया जाए, मेरी दुविधा, मूल रूप से, दो अनुप्रयोगों के बीच एक गणना साझा करने के लिए कैसे है।वेब सेवा

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

दस्तावेज़ प्रकार (7 संभव दस्तावेज़ प्रकार: चालान, अनुबंध आदि) वेब सेवा के UploadDocument विधि के लिए एक पैरामीटर के रूप में पारित किया गया है। सवाल यह है कि, इस पैरामीटर के प्रकार (और संभावित मूल्य) क्या होना चाहिए?

चूंकि आपको इन मानों को दोनों अनुप्रयोगों में हार्डकोड करने की आवश्यकता है, मुझे लगता है कि यह ओ.के. है। एक वर्णनात्मक स्ट्रिंग (चालान, अनुबंध, WorkOrder, SignedWorkOrder) का उपयोग करें।

यह शायद पहला आवेदन पत्र में एक DocumentTypes गणन बनाने के लिए, और दूसरा आवेदन में यह भी पुन: पेश करने, और फिर उन दोनों के बीच पारित वेब सेवा से इसी पूर्णांक मान एक बेहतर दृष्टिकोण है?

उत्तर

3

मैं केवल .NET के बारे में बात कर सकता हूं, लेकिन यदि आपके पास एएसपीनेट वेबसाइट सेवा है, तो आप इसे सीधे एक गणना जोड़ सकते हैं।

जब आप फिर अपने क्लाइंट अनुप्रयोग में "जोड़ें वेब संदर्भ" का उपयोग करें, जिसके परिणामस्वरूप कक्षा कि enum

को शामिल करना चाहिए लेकिन यह मेरे सिर के ऊपर से है, मैं यकीन है कि मैं इसे किया है हूँ अतीत में, लेकिन मैं निश्चित रूप से नहीं कह सकता।

+0

'वेब संदर्भ जोड़ें' enums बना देता है, लेकिन केवल कुछ जिन्हें किसी विधि में संदर्भित किया जाता है। मैं स्वचालित रूप से स्वचालित रूप से जेनरेट की गई संदर्भ.cs फ़ाइल में enums जोड़ सकता हूं और सभी अच्छी तरह से काम करता है। हो सकता है कि यह अलग प्रश्न है, लेकिन संदर्भ संदर्भ फ़ाइल में मैन्युअल रूप से हैकिंग किए बिना किसी संदर्भित असेंबली (लेकिन कोड में उपयोग नहीं किया गया) में सभी enums जोड़ने के लिए 'वेब संदर्भ जोड़ें' प्राप्त करने का कोई तरीका है? –

+0

@ डेव वेब सर्विसेज विधियों को समाहित करता है, इसलिए यदि एनम का उपयोग करने के कोई तरीके नहीं हैं, तो वेब सेवा परिप्रेक्ष्य से कोई संदर्भ नहीं है - इसे संदर्भित करने के लिए। मैं एक विवरण के साथ एक अलग प्रश्न पूछने की सलाह देता हूं कि आप क्या करना चाहते हैं/आप इसमें एक अपरिवर्तनीय enum क्यों चाहते हैं। –

6

मैं पठनीयता और डिबगिंग के उद्देश्यों के लिए, उनके बीच एक पूर्णांक पारित करने के खिलाफ सुझाव दूंगा। मान लें कि आप अपने लॉग के माध्यम से जा रहे हैं और आप DocumentType = 4 के लिए 500 त्रुटियों का एक गुच्छा देखते हैं। अब आपको यह देखना होगा कि कौन सा दस्तावेज़ टाइप 4 है या यदि अनुप्रयोगों में से कोई एक ऐसे नंबर को संदर्भित करता है जो दूसरे में मौजूद नहीं है, तो शायद मेल नहीं किए गए संस्करणों के कारण।

यह थोड़ा और कोड है, और यह मस्तिष्क के स्थैतिक टाइपिंग हिस्से को थोड़ा कच्चा बनाता है, लेकिन HTTP के शीर्ष पर प्रोटोकॉल में प्राप्त ज्ञान अपारदर्शी गणनाओं पर सुस्पष्ट तारों के साथ होता है।

6

मैं अभी भी आंतरिक रूप से गणना का उपयोग करता हूं लेकिन उम्मीद करता हूं कि उपभोक्ता मुझे केवल नाम ही पास कर दें, न कि संख्यात्मक मूल्य।

बस कुछ मूर्खतापूर्ण उदाहरण वर्णन करने के लिए:

public enum DocumentType 
{ 
    Invoice, 
    Contract, 
    WorkOrder, 
    SignedWorkOrder 
} 

[WebMethod] 
public void UploadDocument(string type, byte[] data) 
{ 
    DocumentType docType = (DocumentType)Enum.Parse(typeof(DocumentType), type); 
} 
3

नेट में, गणन मान (डिफ़ॉल्ट रूप से) नाम के साथ एक्सएमएल में धारावाहिक रूप हैं। ऐसे उदाहरणों के लिए जहां आप एकाधिक मान (flags) प्राप्त कर सकते हैं, फिर यह मानों के बीच एक स्थान डालता है। यह काम करता है क्योंकि गणना में रिक्त स्थान नहीं होते हैं, इसलिए आप स्ट्रिंग को विभाजित करके फिर से मान प्राप्त कर सकते हैं (यानी "चालान अनुबंध साइनड वर्कऑर्डर", लुब्स के उदाहरण का उपयोग करके)।

आप XmlEnumAttribute का उपयोग कर, या जब WCF का उपयोग कर EnumMember विशेषता का उपयोग asp.net वेब सेवाओं में से मूल्यों की क्रमबद्धता नियंत्रित कर सकते हैं।

3

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

0

मैंने देखा है कि VS.net से "वेब संदर्भ जोड़ें" के विपरीत "सेवा संदर्भ जोड़ें" का उपयोग करते समय, वास्तविक enum मान enum नामों के साथ-साथ आते हैं। यह वास्तव में परेशान है क्योंकि मुझे 2.0 और 3.5 क्लाइंट दोनों का समर्थन करने की आवश्यकता है। मैं 2.0 जेनरेट की गई वेब सेवा प्रॉक्सी कोड में जाने और हर बार जब मैं बदलाव करता हूं तो enum मानों को मैन्युअल रूप से जोड़ना पड़ता हूं!

3

यदि आप .NET SOAP से .NET के साथ काम नहीं कर रहे हैं, तो भी आप एक गणनाकर्ता को परिभाषित कर सकते हैं बशर्ते दोनों एंडपॉइंट्स डब्लूएसडीएल का उपयोग कर रहे हों।

<s:simpleType name="MyEnum">  
    <s:restriction base="s:string"> 
      <s:enumeration value="Wow"/> 
      <s:enumeration value="This"/> 
      <s:enumeration value="Is"/> 
      <s:enumeration value="Really"/> 
      <s:enumeration value="Simple"/> 
    </s:restriction> 
</s:simpleType> 

यह डब्लूएसडीएल -> प्रॉक्सी जेनरेटर टूल पर निर्भर करता है ताकि क्लाइंट भाषा में समतुल्य समीकरण में इसका विश्लेषण किया जा सके।

2

इस तरह की इंटरफ़ेस सीमा पर enum एस का उपयोग न करने के कुछ अच्छे कारण हैं। इस विषय पर Dare's post पर विचार करें।