2011-03-08 21 views
5

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

प्रत्येक सेवा पर एक समान विधि Foo है। Foo टाइप TemplateInfo का तर्क लेता है जो मेरी सेवा में परिभाषित किया गया है।

मेरे क्लाइंट पर मेरे पास Client और AdminClient का संदर्भ है। Client.Foo(TemplateInfo)Client.TemplateInfo की अपेक्षा करता है जबकि AdminClient.Foo(TemplateInfo)AdminClient.TemplateInfo की अपेक्षा करता है। मुझे पता है कि एक बार सेवा पहुंचने के बाद Client.TemplateInfo और AdminClient.TemplateInfo एक ही बात है।

मैं यह पता लगाने की कोशिश कर रहा हूं कि टेम्पलेटइन्फो को तुरंत कैसे चालू करें और/या क्लाइंट और व्यवस्थापक विधियों दोनों के साथ काम करने के लिए इसे कास्ट करें। इस ऑब्जेक्ट को बनाने के लिए कोड की एक सभ्य राशि है इसलिए मैं उम्मीद कर रहा था कि प्रत्येक प्रकार के लिए इसे डुप्लिकेट न करें।

साझा असेंबली में प्रकार परिभाषित किए गए हैं और मैं अपने प्रॉक्सी में "पुन: उपयोग प्रकार" हूं। लेकिन मुझे दो अलग-अलग प्रकार मिलते हैं क्योंकि मेरे पास दो सेवा संदर्भ हैं।

कुछ ऐसा करना अच्छा होगा (AdminClient) TemplateInfo, लेकिन शायद मैं प्रकारों को बदलने के लिए क्लोन विधि तैयार करूंगा।

उत्तर

4

ऐसा करने का कोई तरीका नहीं है। वे अलग-अलग प्रकार हैं।

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


ध्यान दें कि क्लाइंट अनुप्रयोग भी दो सेवाओं के रूप में एक ही कक्षा पुस्तकालय को संदर्भित करने की आवश्यकता होगी।

+0

धन्यवाद, आखिरी नोट मेरे परिदृश्य में महत्वपूर्ण है। मैं पहले से ही दो सेवाओं में इसका संदर्भ दे रहा हूं। – earthling

+0

@ जॉन, क्या आप यहां सहायता कर सकते हैं http://stackoverflow.com/questions/43506726/wcf-deserializing-choosing-type-in-depends-on-some-field-once-and-for-all-de कृपया? –

1

सेवा संदर्भ को पूरी तरह से उत्पन्न करने के अलावा, आप सेवा के प्रकार क्लाइंट और सेवा के बीच साझा असेंबली में डाल सकते हैं, और क्लाइंट क्लास उत्पन्न करते समय "संदर्भित असेंबली में पुन: उपयोग प्रकार" या इस तरह की कुछ जांच सकते हैं।

1

आप इसे कर सकते हैं लेकिन इसे आम तौर पर एक अच्छा विचार नहीं माना जाता है। इसका कारण यह है कि यह आपके ग्राहक और सेवाओं को कसकर जोड़ता है। केवल यह करने पर विचार करें यदि आप ग्राहक और दोनों सेवाओं के नियंत्रण में हैं और इस तथ्य के लिए तैयार हैं कि जब आप सेवाओं में से किसी एक में बदलाव करते हैं तो आप ग्राहक को तोड़ सकते हैं।

रिचर्ड ने मुझे दृश्य स्टूडियो का उपयोग करने पर यह कैसे करना है इसके बारे में कुछ संकेतों के साथ मुझे हराया है।

लेकिन

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

मेरे द्वारा किए जा सकने वाले बेहतर तरीके से समझाए गए कई अच्छे लेख हैं। विकिपीडिया एक अच्छी शुरुआत है या डब्ल्यूसीएफ का एक अच्छा नाम था जब इस लेख को वापस रास्ते से है। http://msdn.microsoft.com/en-us/magazine/cc164026.aspx

+0

मुझे आपका अंक मिलता है। यह दो सेवाओं के समान समाधान के भीतर कुछ कार्यात्मक परीक्षणों के लिए है।मुझे लगता है कि कुछ अन्य बदलाव होने जा रहे हैं, मुझे सेवाओं के बीच समान कार्यक्षमता को सक्षम करने के लिए सेवा स्तर पर बनाने की आवश्यकता होगी। – earthling

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