2012-08-14 7 views
7

मेरे पास एक वेब सेवा और ग्राहक है। पैरामीटर और रिटर्न प्रकारों में उपयोग की जाने वाली कक्षाएं दोनों द्वारा साझा की गई एक सामान्य डीएलएल में हैं। हालांकि, जब भी मैं वेब संदर्भ अद्यतन करता हूं, दृश्य स्टूडियो कक्षाओं की प्रतियों को समान नामों और सार्वजनिक गुणों और विधियों के साथ उत्पन्न करता है। फिर समाधान संकलित नहीं होगा क्योंकि क्लाइंट कोड सामान्य DLL में संस्करणों का उपयोग करने का प्रयास करता है। जब भी मैं वेब संदर्भ अद्यतन करता हूं, और सामान्य डीएल के नामस्थान पर इंगित करने के लिए एक उपयोग कथन जोड़ता हूं, तो मैं "डुप्लिकेट" कक्षाओं को हटाकर समस्या को हल कर सकता हूं। क्या इसे स्थायी रूप से ठीक करने का कोई तरीका है?संदर्भ संदर्भ में प्रॉक्सी कक्षाओं की पीढ़ी को रोकें जब वेब संदर्भ जोड़ना/अपडेट करना

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

+1

इसी तरह के प्रश्न के अनुसार http://stackoverflow.com/questions/134064/reuse-existing-types-is-ignored-when-adding-a-service-reference, "पुन: उपयोग प्रकार" पुरानी "के लिए समर्थित नहीं है स्कूल "(एएसएमएक्स) वेब संदर्भ। – stannius

+0

http://stackoverflow.com/questions/3389679/how-does-visual-studio-2008-and-svcutil-decide-which-types-to-re-use-from-refere – stannius

+0

आपको अपनी टिप्पणी को एक टिप्पणी के रूप में जोड़ना चाहिए जवाब। मैं फिर ऊपर उठाना होगा। –

उत्तर

2

यह एएसएमएक्स वेब सेवाओं की एक "विशेषता" है। में से किसी एक के अलावा इसके अलावा कोई रास्ता नहीं है:

  • अधिक आधुनिक प्रकार की वेब सेवा का उपयोग करें।
  • एक सामान्य DLL
  • का उपयोग न करें जब भी आप ऊपर दिए गए मूल प्रश्न के रूप में वेब संदर्भ अपडेट करते समय मैन्युअल रूप से ठीक करें।

सूत्रों का कहना है: अन्य stackoverflow सवाल:

0

ऐसा करने का कोई तरीका नहीं है।

हालांकि, मुझे लगता है कि हमारे पास यहां एक डिज़ाइन समस्या है। जब हम एक वेब सेवा बनाते हैं, तो हम उम्मीद करते हैं कि हमारे ग्राहकों को हमारे द्वारा किसी भी डीएलएल को संदर्भित करने की आवश्यकता नहीं है। वेब सेवा द्वारा उजागर किए गए प्रकार केवल उनके उपयोग के लिए पर्याप्त होना चाहिए (वेब ​​सेवाएं इंटरऑपरेबिलिटी के बारे में हैं, जावा में लिखे गए अपने क्लाइंट ऐप की कल्पना करें, आप .NET dll का संदर्भ नहीं दे सकते)।

यही कारण है कि जब आप किसी वेब सेवा का संदर्भ देते हैं तो इन प्रकारों को बनाया जाता है। मेरी राय में, आपको केवल अपने क्लाइंट ऐप में वेब सेवा द्वारा उत्पन्न कक्षाओं पर भरोसा करना चाहिए। क्लाइंट प्रोजेक्ट से साझा डीएलएल के संदर्भ को हटा दें।

यह आपके प्रश्न का उत्तर नहीं देता है, लेकिन आपकी समस्या के लिए एक विकल्प प्रदान करता है।

+1

डाउनवॉटर, कृपया अपने वोट के लिए एक स्पष्टीकरण प्रदान करें। धन्यवाद। – Fabio

+0

मेरा अनुमान है क्योंकि यह प्रश्न का उत्तर नहीं देता है। "मुझे इसे पुराने जूता या कांच की बोतल के साथ हथौड़ा करना चाहिए" इसके बावजूद। – stannius

+0

हां, @ स्टैनियस, शायद यही कारण है। मैंने अपना जवाब थोड़ा बदल दिया ताकि "हथौड़ा जूते" वाले लोग अब तक शिकायत नहीं कर सकें। बीटीडब्ल्यू, मुझे उम्मीद है कि मेरा जवाब आपके लिए उपयोगी था, किसी भी तरह से। – Fabio

1

मुझे एक ही समस्या थी, लेकिन मैंने अपने ग्राहक में अनुरोध/प्रतिक्रिया प्रकार के साथ सही असेंबली संदर्भ जोड़ने के लिए उपेक्षित किया था। एक बार जब मैंने उस संदर्भ को जोड़ा, और यह सुनिश्चित किया कि सेवा पुन: संवाद संवाद में "पुन: उपयोग प्रकार" चेकबॉक्स चालू था, तो यह ठीक से काम करता था।

+1

-1: वह कहता है कि वह "अद्यतन वेब संदर्भ" का उपयोग कर रहा है –

1

डोमेन कक्षा में, सेट AnonymousType = जब वेब संदर्भ जोड़ने उपसर्ग अप्रत्याशित के साथ पैदा वर्ग को रोकने के लिए झूठी
[System.Xml.Serialization.XmlTypeAttribute (AnonymousType = झूठा)] लेकिन यह केवल यह सुनिश्चित करता है कि क्लास, संदर्भ सी में ऑटो-जेन डोमेन क्लास के समान संरचना है।

इस पर घूमने का एक तरीका डोमेन ऑब्जेक्ट को क्रमबद्ध/deserialize करना है।

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