सेवा संदर्भ त्रुटि: सेवा संदर्भ के लिए कोड उत्पन्न करने में विफल


131

मेरे पास एक विंडोज सर्विस सॉल्यूशन है और मैं वीएम २०१० में हर्मीस (ओपेंससोर्स ईबेस मैसेज सर्वर) वेब सर्विस के लिए एक सेवा संदर्भ जोड़ने की कोशिश कर रहा हूं।

मैं URL का उपयोग करके वेब सेवा पा सकता हूं, लेकिन जब मैं कोशिश करता हूं और सेवा संदर्भ को पॉप्युलेट करता हूं तो मुझे विज़ुअल स्टूडियो में निम्नलिखित त्रुटियां मिलती हैं:

Error 8 Custom tool error: Failed to generate code for the service reference 'testService'.  Please check other error and warning messages for details. C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler


Warning 6 Custom tool warning: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Warning 7 Custom tool warning: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:service[@name='EbmsMessageStatusQuery']/wsdl:port[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Warning 5 Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.XmlSerializerMessageContractImporter
Error: Schema with target namespace 'http://service.ebms.edi.cecid.hku.hk/' could not be found.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

कुछ जांच से ऐसा प्रतीत होता है कि यह इस कारण है कि svcutil.exe एक निर्देशिका (संभवत: c: \ windows \ temp) की अनुमति नहीं होने के कारण प्रॉक्सी का निर्माण करने में सक्षम नहीं है। मैंने विभिन्न एक्सेस अनुमतियों को असाइन करने की कोशिश की है, लेकिन मुझे वास्तव में यकीन नहीं है कि किस उपयोगकर्ता को अनुमति की आवश्यकता है, या यदि यह सिर्फ एक लाल हेरिंग है।

किसी भी विचार की बहुत प्रशंसा की जाएगी।

धन्यवाद

जवाबों:


303

सभी संदर्भित असेंबली में पुन: उपयोग प्रकारों को कॉन्फ़िगर करने के लिए कॉन्फ़िगर करें सेवा संदर्भ विकल्प

विवरण के लिए यह जाँच करें


3
वैकल्पिक रूप से, जब "संदर्भित विधानसभाओं में पुन: उपयोग के प्रकार" की वास्तव में आवश्यकता होती है, तो आप विशेष रूप से उस उद्देश्य के लिए बनाई गई क्लास लाइब्रेरी प्रोजेक्ट से सेवा संदर्भ जोड़ सकते हैं। अतिरिक्त जानकारी के लिए मेरे उत्तर की जाँच करें ।
फ्लोरिन डुमिट्रेस्कु

मैं "पुन: उपयोग प्रकार" को अनचेक किए बिना एक समाधान चाहता था, और मैं एक काम करने में कामयाब रहा जो यहां काम करता है, मेरा जवाब यहां देखें
शाहीन दोहान

ऐसा कुछ करने के बजाय, असेंबली का उपयोग करें जो WCF क्लाइंट को संदर्भित सभी के नेत्रहीन उपयोग करने के बजाय निर्भर करता है, यह प्रश्न में चेकबॉक्स को अनचेक करने की तुलना में मुश्किल और अधिक कालातीत हो सकता है, लेकिन मुझे यह समाधान एक से अधिक उपयुक्त लगता है उत्तर के रूप में चिह्नित।
ऑस्कर गिलमिलन

यह भी सुनिश्चित करें कि आपका प्रोजेक्ट केवल रीड नहीं है..यह मेरी समस्या थी ..
अरिहंत जैन

126

अपने सेवा संदर्भ पर राइट क्लिक करें और चुनें Configure Service Reference...

सेवा संदर्भ कॉन्फ़िगर करें

फिर अनचेक करें Reuse types in referenced assemblies

पुन: उपयोग के प्रकार

क्लिक करें OK, अपने समाधान को साफ और पुनर्निर्माण करें।


2
क्या होगा यदि मुझे संदर्भित विधानसभाओं का पुन: उपयोग करने की आवश्यकता है? मेरे पास एक प्रोजेक्ट है और वह चेकबॉक्स चेक किया गया है। अपडेट मेरी मशीन में काम करता है, लेकिन किसी वर्कमेट की मशीन पर यह नहीं है ... कोई सुराग?
रिकार्डो एपलटन

यह तब हुआ जब मैंने अपने प्रोजेक्ट के साथ v4.6.1 से v4.7 में अपग्रेड किया। यह तय किया।
माइक फ्लिन

17

विज़ुअल स्टूडियो 2012 का उपयोग करते हुए ASP .Net MVC 4.0 प्रोजेक्ट से वेब सेवा के लिए क्लाइंट जेनरेट करने की कोशिश करते समय मुझे भी इसी तरह की त्रुटि का सामना करना पड़ा।

समस्या की जड़ यह तथ्य प्रतीत होता है कि जिस परियोजना से मैं क्लाइंट उत्पन्न करने की कोशिश कर रहा था, वह एक विधानसभा का संदर्भ दे रही थी, जो बदले में एक और विधानसभा पर निर्भर थी जिसे संदर्भित नहीं किया जा रहा था।

जब सेवा कॉन्फ़िगरेशन में "पुन: उपयोग किए गए असेंबली टाइप्स" को सक्षम किया जाता है, तो सेवा जनरेटर संभवतः सभी संदर्भित असेंबलियों का निरीक्षण कर रहा है ताकि उन प्रकारों की एक सूची प्राप्त की जा सके जिन्हें पुन: उपयोग किया जा सकता है। यह तथ्य कि संदर्भित विधानसभाओं में से एक अन्य विधानसभा का संदर्भ दे रही है जो उपलब्ध नहीं है, शायद जनरेटर विफल हो रहा है।

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

उदाहरण के लिए, यदि सेवा स्वयं WCF का उपयोग करके बनाई गई है और इसके अंदर कुछ विधि पैरामीटर प्रकार System.Guid के हैं, तो उनका उपयोग जनरेट किए गए क्लाइंट में किया जाएगा यदि पुन: उपयोग प्रकार विकल्प अक्षम किया गया है।

एक विकल्प जिसे मैं पुन: उपयोग करने के प्रकार को अक्षम करना पसंद करता हूं , वह है विशेष रूप से उस उद्देश्य के लिए बनाई गई क्लास लाइब्रेरी प्रोजेक्ट से सेवा संदर्भ जोड़ना। एक बात का ध्यान रखें कि क्लास लाइब्रेरी के app.config से लेकर स्टार्टअप प्रोजेक्ट की कॉन्फ़िगरेशन फ़ाइल तक सभी सेवा संबंधी कॉन्फ़िगरेशन कॉपी करें।

यदि स्थानीय असेंबली में उन प्रकारों को परिभाषित किया जाता है जिन्हें सेवा क्लाइंट में पुन: उपयोग करने की आवश्यकता होती है, तो उन असेंबली को केवल उनके सभी आश्रितों के साथ-साथ उपर्युक्त क्लास लाइब्रेरी प्रोजेक्ट से संदर्भित करने की आवश्यकता होती है।


अजीब। मैंने अपना बंधन HttpBinding से NetNamedPipeBinding में बदल दिया (एक मेक्सिको समापन बिंदु भी जोड़ा) और अपने ग्राहक असेंबली में इसे एनक्रिप्ट किया। मैंने एक नई क्लास लिबरी बी बनाई, जिसने मेरी WCF सेवा को संदर्भित किया। फिर मैंने ए के संदर्भ में बी जोड़ा और जादुई रूप से सब कुछ फिर से काम करता है। बहुत अजीब। समाधान के लिए धन्यवाद
साइट्रोनस

3

http://uliasz.com/2011/06/wcf-custom-tool-error-failed-to-generate-code-for-the-service-reference/#comment-1647

ऊपर दिए गए लेख के लिए धन्यवाद।

मेरे मामले में, मेरे पास वीएस.नेट 2008 में मेरी WPF परियोजना के साथ यह समस्या है। इस लेख के माध्यम से जाने के बाद, मुझे एहसास हुआ कि वेब सेवा में उपयोग की जाने वाली असेंबली क्लाइंट पर उपयोग की जाने वाली असेंबली का भिन्न संस्करण है।

क्लाइंट पर असेंबली को अपडेट करने के बाद यह ठीक काम करता है।


1

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

सभी मैं कह सकता हूं कि WSDL में एक गायब स्कीमा लगता है (लक्ष्य नामस्थान के साथ 'http://service.ebms.edi.cecid.hku.hk/')। मैं मुद्दों और स्कीमा के अलग-अलग हैंडलिंग के बारे में जानता हूं जब निर्देशों को शामिल नहीं किया जाता है।

आम तौर पर मैंने माइक्रोसॉफ्ट की वेब सेवाओं के कार्यान्वयन को बहुत अच्छा पाया है, इसलिए मुझे लगता है कि वेब सेवा डोडी डब्ल्यूएसडीएल को वापस भेज रही है।


धन्यवाद अलीस्टैड, मैं डब्ल्यूएसडीएल को काम से निकालने के लिए कोशिश करूंगा और साझा करूंगा।
jheppinstall

0

मुझे सिल्वरलाइट 5 (VS2012) में वही त्रुटि मिली

आप इसके संदर्भ भी निकाल सकते हैं:

  • System.ServiceModel.DomainServices.Client
  • System.ServiceModel.DomainServices.Client.Web

सेवा संदर्भ अपडेट करने के बाद, उन्हें वापस जोड़ना सुनिश्चित करें।


0

जैसा कि ऊपर कहा गया है, कुछ अलग-अलग समस्याएं संभव हैं। हमने जो पाया वह यह है कि। WLF लाइब्रेरी के लिए .DLL को क्लाइंट प्रोजेक्ट के संदर्भ में जोड़ा गया था। यह, बदले में, ऑब्जेक्ट्स को हल करने के साथ समस्याएं पैदा करता है और इस तरह फाइलों को कोड पीढ़ी चरणों द्वारा "खाली" किया जाता है। "पुन: उपयोग प्रकार ..." के उपयोग को अनचेक करते समय, यह उत्तर की तरह लग सकता है, यह ऑब्जेक्ट प्रकारों की अतिरिक्त परिभाषा बनाता है, जो वास्तविक प्रकारों के लिए एक नए नाम स्थान में समरूपता है, जो तब सभी प्रकार के "संगतता" मुद्दों का कारण बनता है उन प्रकारों का उपयोग। केवल अगर आप वास्तव में "छिपाना" चाहते हैं तो आपको इस विकल्प की जांच करनी चाहिए।

उस प्रकार को छिपाना उचित होगा जब आप एक "DLL" प्रकार की निर्भरता को उस परियोजना में "लीक" नहीं करना चाहते हैं जिसे आप दूसरे से अलग रखने की कोशिश कर रहे हैं। यदि WCF लाइब्रेरी प्रोजेक्ट के लिए DLL क्लाइंट प्रोजेक्ट संदर्भों में रेंगता है, तो आपको यह समस्या सभी प्रकार के अजीब दुष्प्रभावों से होगी क्योंकि टाइप परिभाषाएँ DLL में भी हैं।


0

एक ही समस्या का सामना करना, व्यवस्थापक मोड में Visual Studio चलाकर हल किया गया


0

VS2015 प्रोफेशनल में VS2010 WCF + सिल्वरलाइट समाधान को अपग्रेड करते समय मुझे इस समस्या का सामना करना पड़ा है । स्वचालित रूप से सिल्वरलाइट 4 से सिल्वरलाइट 5 में अपग्रेड करने के अलावा, सेवा संदर्भ पुन: उपयोग चेकबॉक्स मान को बदल दिया गया और पीढ़ी विफल रही।


0

"पुन: उपयोग प्रकार" हमेशा समस्या नहीं होती है जब यह त्रुटि होती है।

किसी पुरानी सेवा का संदर्भ जोड़ते समय, 'उन्नत' पर क्लिक करें और वहाँ 'वेब संदर्भ जोड़ें'। अब अपने wsdl से लिंक करें और सब कुछ काम करना चाहिए।


0

यदि आप असेंबली पुनः उपयोग चेकबॉक्स को अनचेक किए बिना इसे ठीक करना चाहते हैं, तो यह मेरे लिए काम कर रहा है:

  • उस संदर्भित असेंबली को निकालें जिसे आप पुन: उपयोग करना चाहते हैं
  • प्रोजेक्ट के सभी बिन फ़ोल्डर को हटा दें
  • अद्यतन सेवा संदर्भ
    • "निर्दिष्ट संदर्भित विधानसभाओं में पुन: उपयोग के प्रकार रखें"
  • त्रुटियों को ठीक करने के लिए फिर से असेंबली का संदर्भ जोड़ें
  • सेवा संदर्भ फिर से अपडेट करें

0

Visual Studio को पुनरारंभ करने ने मेरे लिए चाल चली। मैं वीएस 2015 का उपयोग कर रहा हूं।


-1

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

मेरे लिए क्या काम निम्नलिखित था:

  • संदर्भित विधानसभा निकालें जिसे मैं फिर से उपयोग करना चाहता था
  • अद्यतन सेवा संदर्भ
  • "निर्दिष्ट संदर्भित विधानसभाओं में पुन: उपयोग के प्रकार रखें"
  • त्रुटियों को अनदेखा करें, ऐसा इसलिए है क्योंकि संदर्भ गायब है!
  • त्रुटियों को ठीक करने के लिए फिर से असेंबली का संदर्भ जोड़ें
  • सेवा संदर्भ फिर से अपडेट करें

वोइला, अब यह वास्तव में अद्यतन करता है और अब मेरे उत्पन्न कोड को हटाने की कोशिश नहीं करता है।

मैं फिर से उपयोग प्रकार सुविधा पर देने के लिए तैयार था ...

संपादित करें: यह भी सुनिश्चित करें कि बिल्ड कॉन्फिगर करना AnyCPU या x86 है, क्योंकि svcutil x64 के साथ छोटी गाड़ी है।

डाउनवॉटर करने के लिए: क्षमा करें यदि यह आपके लिए काम नहीं करता है, तो मुझे यह भी नहीं पता कि यह मेरे लिए क्यों काम किया, लेकिन यह किया। हो सकता है मैंने उस समय कुछ और किया हो जो समस्या को ठीक कर दे, लेकिन अब जानने का कोई तरीका नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.