2010-02-24 19 views
19

मैं डब्ल्यूसीएफ सेवाओं का एक सेट तैयार कर रहा हूं जो सामान्य डेटा अनुबंध (या यदि आप चाहें तो संस्थाएं) साझा करते हैं। ये सरल डेटा स्थानांतरण ऑब्जेक्ट्स हैं जो डेटाकंट्रैक्ट और डेटामेम्बर विशेषताओं से सजाए गए हैं। मैं स्पष्ट रूप से नाम और नामस्थान निर्दिष्ट कर रहा हूं। प्रति सेवा अनुबंध के 12 सदस्यों के औसत के आईडीसीन की सिफारिश के सिद्धांतों का पालन करने की कोशिश में, मैं अपनी सेवा परियोजना को कई सेवाओं में तोड़ रहा हूं।एक ही डेटा अनुबंधों का संदर्भ देने वाली एकाधिक डब्ल्यूसीएफ सेवाएं

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

मेरा सवाल यह है कि, क्या मैं अपनी सेवाओं में कुछ भी कर सकता हूं, या वे क्लाइंट ऐप में कर सकते हैं ताकि यह पता चल सके कि डेटा अनुबंध किस प्रॉक्सी से आया है?

+0

मुझे एक ही समस्या है। मैंने नीचे दिए गए लेख में सलाह का उपयोग करने का प्रयास किया, लेकिन कोई खुशी नहीं। हालांकि, मैं डब्ल्यूसीएफ रीस्टफुल सेवाओं का उपयोग कर रहा हूं (इसमें नीचे काम करने वाली विधि के साथ कुछ करने के लिए कुछ हो सकता है), इसलिए मैंने एक सामान्य डीएलएल का संदर्भ दिया जिसमें मेरा डेटा अनुबंध था, और सेवा संदर्भों को एक साथ पूर्ववत किया गया। चूंकि मैं सरल HTTP वेब अनुरोधों का उपयोग करके अपनी सेवाओं पर कॉल करता हूं, इसलिए मुझे वास्तव में परियोजना में सेवा संदर्भों की आवश्यकता नहीं होती है। – Nick

उत्तर

2

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

यह जानना उपयोगी हो सकता है कि वे .NET के अलावा सेवा का उपभोग करने के लिए किस तकनीक का उपयोग कर रहे हैं? क्या विख्यात संदर्भ संदेश फेंक रहा है?

+0

आप इसे .NET में कर सकते हैं, बस अपने डेटा अनुबंध डीएल का संदर्भ न दें और देखें कि क्या होता है। एक परीक्षण प्रोजेक्ट बनाएं, अपनी 2 सेवाओं को जोड़ें जो संदर्भ के रूप में एक आम डेटा अनुबंध का उपयोग करते हैं और आपको संदिग्ध संदेश मिल जाएगा। –

0

मेरे पास कई अंत सेवाएं हैं जो मेरे अंत में वस्तुओं को साझा करती हैं। मुझे यकीन नहीं है कि आपको यह समस्या क्यों है। मेरे मामले में, मैं इस तरह से वस्तुओं तक पहुंचने में सक्षम हूं। । । ।

Service1 ग्राहक = नए Service1()

client.CommonLibrary.Address। । ।

Service2 client2 = नए Service2()

client2.CommonLibrary.Address। । । ।

+0

यह मेरे लिए भी काम करता है। मुद्दा यह है कि वे 2 अलग-अलग वस्तुएं हैं। उपभोग करने वाला एप्लिकेशन केवल सामान्य पुस्तकालय नहीं कह सकता है। एड्रेस, इसे सेवा के नाम से योग्यता प्राप्त करनी होगी। यह वास्तव में एक समस्या नहीं है, मैं बस सोच रहा था कि सेवा संदर्भ सामान्य डेटा अनुबंधों के लिए समान नामस्थान का पता लगाएंगे और इसे साझा करेंगे। –

0

यह इस बात पर निर्भर करता है कि वे क्लाइंट पक्ष पर किस टूल का उपयोग कर रहे हैं। उदाहरण के लिए, जावा के लिए एक्सिस 2 के साथ wsdl2java उपकरण -यू स्विच का उपयोग करके प्रकार साझा कर सकता है।

how can I share proxy objects across multiple Axis2 web service clients?

0
मेरी समझ से

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

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

+0

फ़ैडरियन, मेरे सभी डेटा अनुबंध एक असेंबली में हैं। मुद्दा यह है कि यदि 2 सेवाएं समान डेटा अनुबंध का संदर्भ देती हैं तो प्रत्येक सेवाओं को इसका अपना नामस्थान संस्करण मिलता है। –

+0

पॉल, क्या आपने डेटाकंट्रैक्ट विशेषता में नेमस्पेस को स्पष्ट रूप से निर्दिष्ट करने का प्रयास किया था? और आपने डेटा अनुबंध असेंबली कैसे बनाई? क्या आपने svcutil टूल का उपयोग करने का प्रयास किया है और मैन्युअल रूप से/नेमस्पेस के साथ डेटा नियंत्रण उत्पन्न करता है: पैरामीटर? मैं व्यक्तिगत रूप से उस मुद्दे पर था इसलिए मैं सही बटन नहीं मार सकता, बस कुछ विचार साझा कर रहा हूं। –

0

हम विजुअल स्टूडियो सहायक के माध्यम से नहीं बल्कि कस्टम बैच फ़ाइलों द्वारा slsvcutil.exe (जैसा कि हम सिल्वरलाइट का उपयोग करते हैं) के माध्यम से हमारी सेवा प्रॉक्सी उत्पन्न करते हैं।वहाँ आप इस तरह/एन पैरामीटर का उपयोग कर एक नाम स्थान मानचित्रण निर्दिष्ट कर सकते हैं:

"C:\Program Files (x86)\Microsoft SDKs\Silverlight\v5.0\tools\slsvcutil.exe "^ 
http://ServiceUrl/MyService.svc^ 
**/n:http://youruri.org/CustomerService/DataContracts,CLR.Namespace.CustomerService^** 
/n:*,CLR.Namepsace.MyService^ 
/r:"%ProgramFilesFolder%\Reference Assemblies\Microsoft\Framework\Silverlight\v5.0\System.Windows.dll"^ 
/ct:System.Collections.ObjectModel.ObservableCollection`1^ 
/edb^ 

तो सभी डेटा नाम स्थान http://youruri.org/CustomerService/DataContracts होने ठेके प्रॉक्सी फ़ाइल और इतने पर में clr नाम स्थान CLR.Namespace.CustomerService को उत्पन्न कर रहे हैं। यह देखते हुए कि आपने इस प्रॉक्सी को उसी प्रॉक्सी असेंबली में अग्रिम रूप से जेनरेट किया है, आप इस पूरे नेमस्पेस को अपनी दूसरी फाइल से बाहर कर सकते हैं और सब कुछ ठीक काम करता है - हमने अंतिम चरण के लिए एक छोटा सा टूल लिखा था। अन्य सभी कॉन्ट्रैक्ट नेमस्पेस सीएलआर.Namepsace.MyService namspace (सभी को पकड़ने का तारांकन देखें)

प्रक्रिया सेट अप करने के लिए कुछ चमकदार है क्योंकि आपको बैच फ़ाइलों को शिल्प करना है, लेकिन एक बार ऐसा करने के बाद यह अच्छा काम करता है।