2009-09-17 6 views
16

जब मैं निम्न विधि को परिभाषित किया है:मैं डब्ल्यूसीएफ को आवश्यक विधि पैरामीटर (minoccurs = "1") के साथ डब्लूएसडीएल को स्वत: उत्पन्न करने के लिए कैसे मजबूर कर सकता हूं? WCF और OperationContracts का उपयोग कर

[OperationContract] 
    [FaultContract(typeof(ValidationFault))] 
    [FaultContract(typeof(FaultException<ExceptionDetail>))] 
    int DoSomething(int someId, MyComplexType messageData); 

इस WCF क्रम से एक डबल्यूएसडीएल में अनुवाद किया जाता है, यह minoccurs = "0" मानकों someId और messageData के लिए सूचीबद्ध साथ साथ समाप्त होता है (और बाद में इन पैरामीटर गुम होने पर रनटाइम त्रुटि फेंकता है)।

अगर मैं एक प्रॉक्सी SoapUI का उपयोग कर रहा है कि इस तरह दिखता है प्राप्त उत्पन्न:

<com:DoSomething> 
    <!--Optional--> 
    <com:EventId>1</com:EventId> 
    <!--Optional--> 
    <com:myComplexType > 
     <com:id>1</com:id> 
    </com:myComplexType > 
    </com:DoSomething> 

MyComplexType में आईडी फ़ील्ड अप DataMemeber विशेषता IsRequired = "true का उपयोग कर के साथ चिह्नित है "और इस प्रकार अनिवार्य के रूप में उजागर किया गया है।

यह स्पष्ट रूप से डब्लूएसडीएल के लिए बहुत भ्रामक है कि यह निर्दिष्ट करने के लिए कि पैरामीटर वैकल्पिक है, लेकिन मुझे ऑपरेशन कंट्रैक्ट को मार्क करने के लिए कोई स्पष्ट तरीका नहीं दिख रहा है ताकि डब्ल्यूसीएफ को आवश्यकतानुसार इन पैरामीटर को पहचानने और बेनकाब करने के लिए मजबूर किया जा सके।

मैं थोड़ा परेशान हूं, ऐसा करने के लिए एक स्पष्ट तरीका प्रतीत नहीं होता है (इंटेलिजेंस/एमएसडीएन/गूगल पढ़ना)। या मैं अंधेरा जा रहा हूं और कुछ स्पष्ट दिख रहा हूं।

कोई सुराग?

+0

मैं इस माइक्रोसॉफ्ट कनेक्ट मुद्दा https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx पाया है:

[ServiceContract] [RequiredParametersBehavior] public interface ICalculatorService { [OperationContract] int Add(int firstValue, int secondValue); } 

यहाँ ब्लॉग पोस्ट है कि यह पूरे विस्तार से व्याख्या है FeedbackID = 482144 जो दर्शाता है कि यह संभव नहीं हो सकता है। जो बेकार है। – DavidWhitney

+0

आगे विचार के साथ, ऐसा प्रतीत होता है कि पैरामीटर minoccurs = "0" के रूप में सूचीबद्ध हैं क्योंकि प्रकार स्वयं शून्य हो सकते हैं, इस प्रकार, अगर किसी ने एक शून्य की आपूर्ति की है तो यह अभी भी विधि सिग से मेल खाएगा। अभी भी डब्ल्यूएसडीएल पीढ़ी के प्रयोजनों और कॉलिंग एप्लिकेशन/संगठन के साथ अनुबंध को परिभाषित करने में मदद नहीं करता है। – DavidWhitney

+0

जेनरेट डब्लूएसडीएल प्रभावित नहीं है क्योंकि प्रकार शून्य हो सकता है (संदर्भ प्रकार बनाम मूल्य प्रकार)। यदि कोई मान प्रकार छोड़ा गया है, तो उस मान प्रकार के लिए डिफ़ॉल्ट मान का उपयोग किया जाएगा। हालांकि नीचे मेरा जवाब देखें। – Thorarin

उत्तर

17

मैंने इस विषय के बारे में अभी Blog post लिखा है, क्योंकि मैंने पिछले हफ्ते समस्या में भाग लिया था। यह बताता है कि आप मेटाडेटा को कैसे संशोधित कर सकते हैं कि WCF रनटाइम पर उत्पन्न करता है।

स्रोत फ़ाइल डाउनलोड करने के अलावा, आपको केवल अपनी अनुबंध परिभाषा में एक विशेषता जोड़ने की आवश्यकता है। इसलिए जैसा: Controlling WSDL minOccurs with WCF

+0

दिलचस्प दृष्टिकोण। क्या आप मुझे बता सकते हैं कि यह सभी प्रकार के साथ काम करता है (संदर्भ द्वारा मार्शल और मार्शल मूल्य से)? मुझे पता है कि बेकार प्रकार xsd में चुनौतियों के रूप में पढ़ते हैं ... मैं सोच रहा हूं कि यह आपके द्वारा किए जा रहे कार्यों पर भी लागू होता है। मान लें कि मैं कई आवश्यक 'स्ट्रिंग' पैरामीटर पास कर रहा था। –

0

जांचें कि MyComplexType को [DataContract] विशेषता के साथ चिह्नित किया गया है।

अपने स्वयं के डब्ल्यूसीएफ अनुबंध के लिए, मैंने पाया कि minOccurs = 1 उत्पन्न wsdl में IsRequired = true के लिए दिखाई नहीं देगा जब तक अनुबंध में उल्लिखित वस्तुओं की पूरी श्रृंखला को चिह्नित नहीं किया गया था।

+0

यह कितना अजीब है। – DavidWhitney

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

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