2012-06-27 7 views
5

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

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

मैंने चारों ओर ब्राउज़ किया है, और जाहिरा तौर पर मैं सेवा के लिए एक इंटरफेस उत्पन्न करने के लिए svcutil उपयोग कर सकते हैं:

svcutil.exe thewsdl.wsdl thexsd.xsd /language:c# /out:ITestService.cs 

यह सेवा इंटरफ़ेस परिभाषा वाली फ़ाइल उत्पन्न करता है। लेकिन अब क्या?

मुझे लगता है कि एक स्व-होस्टेड सेवा बनाने के लिए सबसे आसान तरीका है, इसलिए मैंने एक नया कंसोल ऐप बनाया, और इसमें मैंने सेवा इंटरफ़ेस परिभाषा से प्राप्त कक्षा को कार्यान्वित किया, और इसे सर्विसहोस्ट के साथ निकाल दिया ।

यह चलता है, और जब यह चल रहा था, तो मैं अपने क्लाइंट ऐप में सेवा संदर्भ बनाने में सक्षम था।

The provided URI scheme 'http' is invalid; expected 'https'. 

सबसे आसान तरीका यह चारों ओर पाने के लिए क्या है: लेकिन जब मैं, इसे कहते हैं ग्राहक app से प्रयास करते हैं, मैं कोई त्रुटि मिलती है? क्या प्रमाणीकरण और प्रमाणीकरण को बंद करने का कोई आसान तरीका है, और केवल अप्रतिबंधित पहुंच की अनुमति है?

संपादित:

मैं इस के लिए एक इनाम जोड़ रहा, मूल प्रश्न कोई ध्यान आकर्षित किया है लगता है के रूप में।

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

तो मेरे पास एक डाउनलोड की गई .wsdl फ़ाइल है, और एक संबंधित .xsd फ़ाइल है, और उनके साथ मैं एक सेवा बनाना चाहता हूं जिसे मैं वीएस -2010 के डीबगर के साथ परीक्षण कर सकता हूं।

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

मैं वहां कैसे जा सकता हूं? मैंने अपनी नई सेवा जोड़ने के लिए एक डब्लूसीएफ सेवा लाइब्रेरी जोड़ने और फिर svcutil.exe का उपयोग करने का प्रयास किया है, लेकिन यह सर्वर-साइड बॉयलरप्लेट के साथ app.config को पॉप्युलेट नहीं करता है, और इसके पुनर्निर्माण के लिए मेरे प्रयास काम नहीं किया

+0

देखो -

  • क्या wsdl उस में है पर निर्भर करता है, हम कुछ और कार्य करने के लिए आवश्यक बाइंडिंग चलाने की अनुमति की आवश्यकता हो सकती intertubes। आपको मूल सेवा कॉन्फ़िगरेशन मेटाडेटा निर्दिष्ट करने की आवश्यकता है। – Cheeso

  • +0

    आप लगभग वहां हैं। कहीं भी आपके app.config में आप परिभाषित करते हैं कि एसएसएल आवश्यक है। इसे यहां प्रकाशित करें और हम इस उत्कृष्ट उत्तर के लिए –

    उत्तर

    1

    मैंने इसे संभालने के लिए Moq का उपयोग किया है। असल में यूनिट परीक्षणों में आप इंटरफ़ेस निर्दिष्ट करते हैं (यह सेवा संदर्भ जोड़ने या svcutil का उपयोग करने के लिए आपके लिए जेनरेट किया गया होगा) और यदि आप इसे कॉल करते हैं तो आप इसे वापस करना चाहते हैं।

    उदाहरण नीचे स्थापना:

    var mock = new Mock<IFoo>(); 
    mock.Setup(foo => foo.DoSomething("ping")).Returns(true); 
    

    तो फिर जब आप अपने सेवा कॉल बाहर MOQ करना चाहते

    var myObject = new IFoo; 
    var resp = myObject.DoSomething("whateverwillbeoverriddenbyping"); 
    

    और resp सच हो जाएगा।

    Moq का उपयोग करने के अलावा अन्य विकल्प हैं। विकल्पों में इंटरफ़ेस लेने और इसके एक अलग संस्करण को इंजेक्शन देने में शामिल हैं। उदाहरण के लिए, आप अपने वर्ग कन्स्ट्रक्टर को इंटरफेस में गुजरकर, एक कन्स्ट्रक्टर इंजेक्शन मॉक भी कर सकते हैं।

    +0

    +1 को बंद करने में आपकी सहायता करेंगे। आप सभी हुप्स के माध्यम से कूदने के बाद, डब्ल्यूसीएफ आपको क्या प्रदान करेगा एक ऐसी वस्तु होगी जो आपूर्ति किए गए डब्लूएसडीएल को प्रतिबिंबित करने वाले इंटरफेस को लागू करेगी। परीक्षण उद्देश्यों के लिए आपको सभी डब्ल्यूसीएफ गुफ की आवश्यकता नहीं है। बस इंटरफ़ेस का मज़ाक उड़ाएं और अपने क्लाइंट ऐप के निर्माण के साथ आगे बढ़ें। –

    +0

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

    +0

    सेवा और क्लाइंट दोनों के लिए अपनी कॉन्फ़िगरेशन फ़ाइल system.serviceModel अनुभाग पोस्ट करें। –

    5

    चूंकि आप इसे मजाक करने के बजाय कॉल करने के लिए एक पूर्ण सेवा चाहते हैं।

    इन चरणों का पालन करें:

    1. बनाएं नया "WCF सेवा अनुप्रयोग" परियोजना
    2. कॉपी wsdl और परियोजना में XSD
    3. अपने wsdl फ़ाइल का चयन करें और गुण अनुभाग में देख सकते हैं और पूरा पथ से स्थान कॉपी
    4. समाधान एक्सप्लोरर में प्रोजेक्ट पर राइट क्लिक करें और "सेवा संदर्भ जोड़ें ..."
    5. सेवा पता के लिए, अपने wsdl का स्थान पेस्ट करें जो पिछले में कॉपी किया गया था कदम और हिट जाओ। यह उन परिचालनों को दिखाना चाहिए जिन्हें आप सेवा के लिए उम्मीद कर रहे हैं।
    6. हिट ठीक
    7. यह इंटरफेस और कॉन्फ़िग फ़ाइल आप
    8. अब (हालांकि इस बिंदु पर config- में ग्राहक के पक्ष है कि हम इस स्विच करने के लिए सेवा होना होगा) सहित आप के लिए सभी वस्तुओं को उत्पन्न करनी चाहिए system.serviceModel अनुभाग में सेवा कॉन्फ़िगरेशन अनुभाग जोड़ना चाहिए। चूंकि मुझे आपके wsdl के विनिर्देशों को नहीं पता है, आपको सिस्टम.serviceModel सेक्शन में सेवा नोड बनाना है और उत्पन्न क्लाइंट नोड से एंडपॉइंट नोड कॉपी करें। सेवाओं नोड के नीचे दिए गए उदाहरण के लिए, आप पता बाहर खाली अब के लिए कर सकते हैं:
    <system.serviceModel> 
        <services> 
         <service name="YourService"> 
         <endpoint address="" 
           binding="basicHttpBinding" bindingConfiguration="WeatherSoap" 
           contract="ServiceReference1.WeatherSoap" name="WeatherSoap" />  
         </service> 
    
    1. config
    2. सेवा में ग्राहक नोड हटा सकते हैं, यह एक अलग इंटरफ़ेस लागू कर रहा है जब यह उत्पन्न प्रोजेक्ट ताकि आप उपरोक्त एंडपॉइंट में अनुबंध विशेषता में सूचीबद्ध एक के साथ कार्यान्वित इंटरफ़ेस को प्रतिस्थापित करना चाहें। फिर अपने सदस्यों को लागू करें और इसे उपलब्ध संचालन को विस्फोट करना चाहिए। आप सेवा संचालन वापस लौटने के लिए जो कुछ भी चाहते हैं उसे भर सकते हैं। wsHttpbinding, netTCPbinding के लिए की स्थापना की तरह, आदि पर WCF 101 के लिए
    संबंधित मुद्दे