हमारे उत्पादन वातावरण में, हमारी डब्ल्यूसीएफ सेवाओं को XMLSerializer के साथ क्रमबद्ध किया जाता है। ऐसा करने के लिए हमारी सेवा इंटरफेस में [XMLSerializerFormat] विशेषता है। अब, हमें DataContractSerializer में बदलने की जरूरत है, लेकिन हमें अपने मौजूदा ग्राहकों के साथ संगत रहना चाहिए। इसलिए, हमें प्रत्येक सेवा को दोनों धारावाहिकों के साथ बेनकाब करना होगा।उसी होस्ट पर एक ही अनुबंध के लिए DataContractSerializer और XMLSerializer दोनों का समर्थन कैसे करें?
हम एक बाधा है: हम प्रत्येक अनुबंध इंटरफ़ेस दो बार फिर से परिभाषित नहीं करना चाहते, हम 50 सेवाओं अनुबंध इंटरफेस है और हम
IIncidentServiceXml
IIncidentServiceDCS
IEmployeeServiceXml
IEmployeeServiceDCS
IContractServiceXml
IContractServiceDCS
के लिए हम ऐसा कैसे कर सकते हैं नहीं करना चाहती?
अधिक जानकारी
इसी को हम अब तक की कोशिश की है का वर्णन है, लेकिन मैं पूरी तरह से अलग दृष्टिकोण की कोशिश करने को तैयार हूँ:
हम कोड द्वारा सभी अंतिमबिंदुओं बनाने की कोशिश की हमारी अपनी सेवाहोस्ट फैक्ट्री कक्षा में। असल में हम प्रत्येक एंडपॉइंट को दो बार बनाते हैं। समस्या यह है कि रनटाइम पर, डब्ल्यूसीएफ शिकायत करता है कि सेवा के पास एक ही संपर्क नाम के साथ दो अंतराल हैं लेकिन विभिन्न अनुबंध डिस्क्रिप्शन उदाहरणों के साथ। संदेश कहता है कि हमें अलग-अलग अनुबंध नामों का उपयोग करना चाहिए या उसी अनुबंध डिस्क्रिप्शन इंस्टेंस का पुन: उपयोग करना चाहिए।
अन्य प्रयास:
हम भी प्रत्येक ContractDescription उदाहरण के लिए अलग नेमस्पेस का उपयोग करके इसे करने की कोशिश की। इस तरह हम एक ही अनुबंध इंटरफ़ेस रखना होगा (IIncidentService) लेकिन दो अलग अलग नामस्थान के साथ:
An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.InvalidOperationException: An exception was thrown in a call to a WSDL export extension: System.ServiceModel.Description.XmlSerializerOperationBehavior
contract: http://ourcompany.cs/XML:IUserServiceWCF ----> System.NullReferenceException: Object reference not set to an instance of an object.
at System.ServiceModel.Description.XmlSerializerMessageContractExporter.ExportFaults(Object state)
at System.ServiceModel.Description.MessageContractExporter.ExportMessageContract()
at System.ServiceModel.Description.XmlSerializerOperationBehavior.System.ServiceModel.Description.IWsdlExportExtension.ExportContract(WsdlExporter exporter, WsdlContractConversionContext contractContext)
at System.ServiceModel.Description.WsdlExporter.CallExtension(WsdlContractConversionContext contractContext, IWsdlExportExtension extension)
मैंने अपने प्रश्न को एक और प्रयास के साथ ऊपर अपडेट किया है – Sylvain