इस WCF त्रुटि का क्या अर्थ है: "कस्टम उपकरण चेतावनी: wsdl आयात नहीं कर सकता: portType"


84

मैंने अपने समाधान में एक WCF सेवा पुस्तकालय परियोजना बनाई, और इसके लिए सेवा संदर्भ हैं। मैं एक क्लास लाइब्रेरी से सेवाओं का उपयोग करता हूं, इसलिए मेरे पास क्लास लाइब्रेरी के अलावा मेरे WPF एप्लिकेशन प्रोजेक्ट से संदर्भ हैं। सेवाओं को सीधे आगे सेट किया जाता है - केवल async सेवा कार्यों को प्राप्त करने के लिए बदल दिया जाता है।

सब कुछ ठीक काम कर रहा था - जब तक मैं अपने सेवा संदर्भों को अपडेट नहीं करना चाहता था। यह विफल रहा, इसलिए मैं अंततः पीछे हट गया और पीछे हट गया, लेकिन यह तब भी विफल रहा! इसलिए - इसमें कोई भी बदलाव किए बिना सेवा संदर्भों को अपडेट करना विफल रहता है। क्यों?!

मुझे जो त्रुटि मिलती है वह यह है:

Custom tool error: Failed to generate code for the service reference 
'MyServiceReference'.  Please check other error and warning messages for details.   

चेतावनी अधिक जानकारी देती है:

Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: 
System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: List of referenced types contains more than one type with data contract name 'Patient' in  
namespace 'http://schemas.datacontract.org/2004/07/MyApp.Model'. Need to exclude all but one of the 
following types. Only matching types can be valid references: 
"MyApp.Dashboard.MyServiceReference.Patient, Medski.Dashboard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" (matching)
"MyApp.Model.Patient, MyApp.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" (matching)
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='ISomeService']

दो समान चेतावनी भी कह रहे हैं:

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://tempuri.org/']/wsdl:portType[@name='ISomeService']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpBinding_ISomeService']  

और उसी के लिए:

Custom tool warning: Cannot import wsdl:port .. 

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

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


ठीक है, msdn ( msdn.microsoft.com/en-us/library/bb628653.aspx ) पर एक संक्षिप्त विवरण है । लेकिन क्या किसी के पास बेहतर स्पष्टीकरण है? यह DataContract's I को कैसे सेट करता है?
१०

जवाबों:


37

जब आप एक सेवा संदर्भ जोड़ते हैं, तो दो तरीके हैं जो सेवा द्वारा उपयोग किए जाते हैं उन्हें संभाला जा सकता है:

  • प्रकार एक dll में संग्रहीत होते हैं, और उस dll को क्लाइंट और सर्वर एप्लिकेशन दोनों से संदर्भित किया जाता है।
  • प्रकार क्लाइंट द्वारा संदर्भित dll में नहीं हैं। उस स्थिति में उपकरण जो सेवा संदर्भ बनाता है, वह reference.cs फ़ाइल में प्रकार बनाएगा।

कई चीजें हैं जो गलत हो सकती हैं। हमने पाया है कि यदि उपकरण क्रैश हो जाता है, तो सेवा संदर्भ को हटाना और फिर से शुरू करना कभी-कभी तेज होता है।

हमने सेवा संदर्भ का उपयोग करना बंद कर दिया है। उन परियोजनाओं के लिए जहां हमारे पास ग्राहक और सेवा का नियंत्रण है, हम इस स्क्रैंकास्ट में वर्णित विधि का उपयोग करते हैं ।


2
धन्यवाद! मुझे वास्तव में वह पेंचकस कल मिला था। यह देखा, और यह एक आंख खोलने वाला था! एक बार मूल संरचना प्राप्त करने के बाद मैं उस संरचना में जाने की योजना बना रहा हूं। लगता है कि आप कुछ ऐसी ही समस्याओं से जूझ रहे हैं, जिन्हें मैं देख रहा हूं। मैं भी अक्सर कुछ गलत होने पर सेवा संदर्भों को हटाने और पढ़ने को समाप्त करता हूं, और यह एक अच्छा संकेत नहीं है .. वर्णित वास्तुकला की उम्मीद करने से मदद मिलेगी!
stiank81 21

क्या कोई भी हाथ से वेब सेवा लिखने में सक्षम है जब आप सिल्वरलाइट 5 के साथ एक पोलिंगडुप्लेक्स बाइंडिंग का उपयोग कर रहे हैं?
रिचर्ड बी

157

मुझे यहाँ अपना उत्तर मिला: http://www.lukepuplett.com/2010/07/note-to-self-don-let-wcf-svcutil-reuse.html

लंबी कहानी छोटी: मैंने उन्नत मेनू से संदर्भ असेंबलियों में पुन : उपयोग के प्रकारों को अनियंत्रित किया ।


मुझे नहीं पता कि यह मायने रखता है, लेकिन मैं एमवीसी का उपयोग नहीं कर रहा हूं, लेकिन वेब फॉर्म।


2
वीएस 2012 के पुनरारंभ की भी आवश्यकता है
जॉर्ज फिलीपकोस

देखने के इच्छुक हैं, लेकिन लिंक अब मर चुका है, कृपया साझा करें यदि आपके पास कहीं और है
क्रिस

1
VS2013 (कोई पुनरारंभ आवश्यक) के तहत एक MVC 3 परियोजना में काम करता है।
पावेल क्राकोविआक

5
+1 - केवल संदर्भ के लिए: इस परिवर्तन को करने के लिए, परियोजना में सेवा संदर्भ पर राइट-क्लिक करें जो इसे खाए और 'कॉन्फिगर सर्विस संदर्भ ...' का चयन करें
GrandMasterFlush

2
कुछ भी बेहतर नहीं है "लंबी कहानी छोटी" :)
रॉन

9

मेरा भी आज यह मुद्दा था। मुझे अपनी गलती खोजने में पूरा एक दिन लग गया। आशा करता हूँ की ये काम करेगा।

मेरा वर्ग जो आयात करने में सक्षम नहीं था, उसके पास एक कटोम एनम प्रकार की संपत्ति है। इस गुण को DataMember के रूप में चिह्नित किया जाता है और Enum को DataContract के रूप में भी चिह्नित किया जाता है। सब कुछ अब तक ठीक है। मैं EnumMember के रूप में हर एनुम सदस्य को चिह्नित करना भूल गया।

तो मैं बदल गया

[DataContract]
public enum SortMethodType
{
    Default = 0,
    Popularity = 1,
    ReleaseDate = 2,
    PublishedDate = 3,
    TranslatedTitle = 4,
    OriginalTitle = 5,
    UserRating = 6,
    Duration = 7
}

इसके लिए:

[DataContract]
public enum SortMethodType
{
    [EnumMember]
    Default = 0,
    [EnumMember]
    Popularity = 1,
    [EnumMember]
    ReleaseDate = 2,
    [EnumMember]
    PublishedDate = 3,
    [EnumMember]
    TranslatedTitle = 4,
    [EnumMember]
    OriginalTitle = 5,
    [EnumMember]
    UserRating = 6,
    [EnumMember]
    Duration = 7
}

और यह आखिरकार काम कर गया!


8

संदर्भ जोड़ते समय उन्नत गुणों पर जाएं और चेकलिस्ट से "System.Window.Browser" को हटा दें, यह समस्या को हल करता है।


धन्यवाद! अब सेवा संदर्भ का उपयोग नहीं कर रहे हैं - @Shiraz द्वारा जवाब से पेंचकस में वर्णित मैनुअल दृष्टिकोण कर रहे हैं। लेकिन वैसे भी यह जानना अच्छा है!
stiank81

8

यह अजीब लग सकता है, लेकिन मैंने इसे संदर्भों को हटाने, फिर विज़ुअल स्टूडियो को बंद करने और इसे फिर से खोलने, और अंत में फिर से संदर्भों को जोड़कर ठीक किया।

मुझे लगता है कि कस्टम टूल चीज़ को पुनः आरंभ करने या कुछ करने की आवश्यकता है।


2
यहां तक ​​कि अगर आप संदर्भ को हटाने के बिना समस्या का पता लगाने के लिए दृढ़ हैं, तो मैं दृढ़ता से आपको एक नई परियोजना बनाने की सलाह देता हूं और यह देखने के लिए संदर्भ जोड़ें कि क्या यह काम करता है। यह आपके मौजूदा प्रोजेक्ट में दिखाई नहीं देने वाली त्रुटि को प्रकट कर सकता है या यह सिर्फ काम कर सकता है
शमौन_वेर

4

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

सौभाग्य।


2

दृश्य स्टूडियो (वीएस) 2010 से 2013 तक मेरे समाधान को अपग्रेड करने और प्रत्येक परियोजना के .NET फ्रेमवर्क को 4 से 4.5.1 तक बदलने के बाद मुझे चेतावनी मिली। मैंने वीएस को बंद कर दिया और फिर से खोला और चेतावनी चली गई।


इससे मुझे मदद मिली, लेकिन मैं .NET 4.5.2 से 4.6 Gaa में बदल गया!
जिमेनेमेक्स

1

'संदर्भित असेंबली में पुन: उपयोग के प्रकार' को बंद करने का एक नकारात्मक पक्ष यह है कि यह अस्पष्ट संदर्भ वाले मुद्दों का कारण बन सकता है। यह सेवा संदर्भ के कारण उन वस्तुओं को फिर से संदर्भ .cs फ़ाइल में बनाने के लिए है, और सेवा को लागू करने वाला आपका कोड उन्हें मूल नामस्थान से संदर्भित कर सकता है।

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

आशा है कि यह किसी और की मदद करता है।


0

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


0

यदि संदेह है कि आपकी सेवा में कोई समस्या नहीं है (जैसे कि एनम के साथ समस्याएं, या अन्य द्वारा उल्लिखित गैर-अनुक्रमिक कक्षाएं) तो एक नए संदर्भ के साथ एक नई परियोजना बनाने का प्रयास करें ।

मैं सिल्वरलाइट 5 का उपयोग कर रहा हूं और मैंने कई बार संदर्भ को हटाने और पुन: बनाने की कोशिश की थी। यह reference.csफाइल हर बार पूरी तरह से खाली हो गई थी और मुझे शाब्दिक समय हो गया था क्योंकि मैंने इसे बनाया है ताकि यह पता लगाने की कोशिश करूं कि सेवा में क्या बदलाव हुआ था, यह सवाल से बाहर था।

मैंने देखा कि त्रुटि में 2.0.5.0 का संदर्भ था। अब मुझे यह भी पता नहीं है कि क्या यह वास्तव में सिल्वरलाइट संस्करण के लिए प्रासंगिक है, लेकिन इसने मुझे बस एक नया प्रोजेक्ट बनाने के बारे में सोचा और फिर सब कुछ काम किया।

चेतावनी 2 कस्टम उपकरण चेतावनी: wsdl आयात नहीं कर सकता: portType विवरण: WSDL आयात एक्सटेंशन चलाते समय एक अपवाद को फेंक दिया गया था: System.ServiceModel.Description। संस्कृति = तटस्थ, PublicKeyToken = 7cec85d7bea7798e 'या इसकी एक निर्भरता। सिस्टम निर्दिष्ट फाइल का पता लगाने में नाकामयाब रहा। एक्सपीथ टू एरर सोर्स: // wsdl: परिभाषाएँ [@targetNamespace = ''] / wsdl: पोर्ट टाइप [@ name = 'IShoppingCart']


0

मैं अपने प्रोजेक्ट को देख रहा था और मैं इसी मुद्दे पर चल रहा था। यह WCF बनाम वेब साइट पर एक ही DLL के विभिन्न संस्करणों में बदल गया। वेब साइट में DLL का एक नया संस्करण था और सेवा DLL के पुराने संस्करण को संदर्भित कर रही थी। एक बार जब वे सभी सिंक में थे तो सभी ने अच्छा काम किया।


0

मैंने उसी त्रुटि का अनुभव किया। मैं लगभग एक दिन तक यह जानने के लिए संघर्ष करता रहा कि क्या गलत हो रहा है। मेरे लिए यह चेतावनी थी कि वीएस फेंक रहा था। यह Yahoo.Yui.Compressor.dll में किसी प्रकार की मैपिंग करने की कोशिश कर रहा था, एक पुस्तकालय जो मैंने जोड़ा था और हटा दिया था (क्योंकि मैंने इसे इस्तेमाल नहीं करने का फैसला किया था) एक दो दिन पहले। यह चौंकाने वाला था क्योंकि पुस्तकालय वहाँ नहीं था, लेकिन किसी तरह इसे संदर्भित करने की कोशिश कर रहा था।

अंत में, मैं ट्रैश से इस dll को पुनर्स्थापित करता हूं, और फिर मैं अपने सेवा संदर्भ को सफलतापूर्वक अपडेट कर सकता हूं।


0

भविष्य में यहां किसी के लिए भी, मेरी एक ही त्रुटि थी लेकिन दो अलग-अलग तरीकों से संस्करण के मुद्दों के कारण।

मेरे पास दो WCF सेवाएँ और दो क्लाइंट अनुप्रयोग हैं जो सेवा संदर्भों के माध्यम से बात करते हैं। मैंने दोनों तरफ एक नगेट पैकेज को अपडेट किया और सेवा संदर्भ को अपडेट करने की कोशिश की और यह त्रुटि मिली।

हटाने से मदद नहीं मिली। "पुन: उपयोग असेंबली" को अनचेक करना वांछित नहीं है क्योंकि मुझे उन्हें पुन: उपयोग करने की आवश्यकता है - यह संपूर्ण बिंदु है।

अंत में, दो अलग-अलग मुद्दे थे:

1) पहला मुद्दा, मेरा मानना ​​है कि एक दृश्य स्टूडियो कैशिंग मुद्दा था। मैं सावधानीपूर्वक सभी संदर्भों पर चला गया और कोई समस्या नहीं मिली लेकिन यह अभी भी फ़ाइल के पिछले संस्करण को खोजने में असमर्थ होने की सूचना दी। मैंने सभी नगेट पैकेजों को अनइंस्टॉल किया, दृश्य स्टूडियो को फिर से शुरू किया और उन्हें फिर से स्थापित किया। सेवा संदर्भ को अद्यतन करने का काम किया।

2) दूसरा मुद्दा एक निर्भरता मुद्दे के कारण था। मैंने दोनों तरफ के नगेट पैकेज को अपडेट किया और सब कुछ सही दिखाई दिया, लेकिन एक गैर-निर्भरता निर्भरता सिंक से बाहर थी। उदाहरण:

पैकेज फू v1 संदर्भ बार v1। संदर्भ को अद्यतन किए बिना स्वतंत्र रूप से फू 2 और वी 2 को अपडेट करना संभव है। यदि आप फू और बार v2 दोनों को स्थापित करते हैं, तो सेवा संदर्भ उपकरण फू v2 को स्कैन करेगा, बार v1 को संदर्भ देखें, और विफल रहें क्योंकि यह पुराने संस्करण को नहीं ढूंढ सकता है। यह केवल सही ढंग से रिपोर्ट किया जाता है यदि आप प्रत्येक पैकेज के लिए अपने dll के संस्करण संख्याओं को अपडेट करते हैं। विजुअल स्टूडियो और MSBuild को एप्लिकेशन के निर्माण में कोई समस्या नहीं होगी, लेकिन सेवा संदर्भ में हर चीज को हल करने की कोशिश में एक भयानक समय होगा।

मुझे उम्मीद है इससे किसी को सहायता मिलेगी।

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