में ServiceKnownType को समझना मुझे डब्ल्यूसीएफ में ServiceKnownType को समझने में थोड़ा परेशानी हो रही है।WCF
this blog से लिया है, तो निम्न कोड काम नहीं करता:
[DataContract(Namespace = “http://mycompany.com/”)]
public class Shape{…}
[DataContract(Namespace = “http://mycompany.com/”)]
public class Circle : Shape {…}
[ServiceContract]
public interface IMyServer
{
[OperationContract]
bool AddShape(Shape shape);
}
।
IMyServer client = new ChannelFactory<IMyServer>(binding, endPoint).CreateChannel();
client.AddShape(new Circle());
कारण यह काम नहीं करता है क्योंकि आप एक सर्कल जोड़ने की कोशिश कर रहे हैं, लेकिन सेवा नियंत्रण केवल एक आकार की अनुमति देता है। आपको ज्ञातता के साथ कुछ करना है, लेकिन मैं थोड़ा काम करता हूं कि यह कैसे काम करता है।
चूंकि वह कोड सेवा में है, इसलिए यह स्वचालित रूप से क्यों नहीं जानता कि सर्किल आकार से लिया गया है? इसके अतिरिक्त, ServiceKnownType वास्तव में क्या करता है?
जब सेवाकॉउनटाइप डेटाकंट्रैक्ट के नीचे रखा जाता है, जाहिर है कि यह काम करता है। मैं अनुमान लगा रहा हूं कि हे, यह विशेष ऑब्जेक्ट प्रकार जिसे आकार कहा जाता है, भी एक मंडल हो सकता है। मुझे समझ में परेशानी हो रही है कि यह इस तरह से क्यों करेगा, क्योंकि यदि आप स्क्वायर जैसे नए प्रकार को जोड़ते हैं तो आपको आकार वर्ग में एक सेवा के लिए टाउन टाइप करना होगा। क्या यह समझ में नहीं आता है कि यह ज्ञात नहीं हो सकता है, ज्ञात टाइप को आकार के बजाए स्क्वायर पर रखने के लिए? तो स्क्वायर कहता है हे, मैं एक आकार हूँ, और आपको आकार वर्ग के साथ परेशान नहीं होना है? यदि आपकी आकार वर्ग लाइब्रेरी में बनाई गई है और आप डायमंडशिप जैसे अपना खुद का घनिष्ठ आकार बनाना चाहते हैं, तो आप इसे आकार वर्ग में नहीं जोड़ सकते हैं क्योंकि आपके पास स्रोत कोड तक पहुंच नहीं है।
क्या इसे उस सेवा के लिए डेटाकंट्रैक्ट की जांच नहीं करना है? उस उदाहरण में केवल दो ही हैं और शायद उन्हें वैसे भी कैश किया गया है। – NibblyPig
नहीं, क्योंकि डेटा अनुबंध यह नहीं कहता कि कौन से सबक्लास वास्तव में उस संभावित कॉल के लिए मान्य हैं - या जो मौजूद है। डेटा अनुबंध सिर्फ "ठीक है, यह इस संपत्ति में एक आकार है" और नहीं "शेयर के सबक्लास यहां आ रहे हैं"। – TomTom