2011-12-10 22 views
5

मैं एक विधि (आपरेशन) के साथ एक नया .NET 4.0 WCF सेवा सेट कर रहा हूं कि दृढ़ता से टाइप किया लेता XSD में पैरामीटर के कच्चे एक्सएमएल जाओ पैरामीटर के रूप में डेटा प्रकार उत्पन्न। यह चीजों को क्लाइंट के लिए साफ और साफ बनाता है - क्लाइंट मजबूत प्रकार के साथ काम कर सकता है और एक्सएमएल के बारे में सोचना नहीं है।एक WCF सेवा कार्यान्वयन

हालांकि, WCF सेवा के कार्यान्वयन में, मैं XML दस्तावेज़ों (LINQ XDocument) के बजाय deserialized वस्तु प्रकार के रूप में पैरामीटर डेटा से निपटने के लिए पसंद करेंगे। यह अच्छा है कि डब्ल्यूसीएफ स्पष्ट प्रकारों के लिए deserialize होगा, लेकिन मेरे जेनेरिक एल्गोरिदम के लिए यह अधिक सुविधाजनक और अधिक लचीला है क्योंकि इसके बजाय एक्सएमएल दस्तावेजों से निपटने के लिए, मुख्य रूप से आने वाले डेटा polymorphic है।

मैं जानता हूँ कि मैं सिर्फ पैरामीटर वस्तुओं लेने के लिए और उन्हें वापस एक्सएमएल के लिए नीचे क्रमानुसार सकते हैं, लेकिन यह बेकार लगता है।

मैं समझता हूं कि मैं एक्सप्लेमेंट के साथ दृढ़ता से टाइप किए गए पैरा को प्रतिस्थापित कर सकता हूं ताकि मैं कार्यान्वयन सुविधा के लिए जो चाहता हूं उसे प्राप्त कर सकूं, लेकिन इससे ग्राहक के लिए मजबूत टाइपिंग (कंपाइलर चेक, इंटेलिजेंस, स्वयं प्रलेखन) के लाभ कम हो जाएंगे।

वहाँ किसी भी तरह से WCF बताने के लिए है कि मेरी सेवा कार्यान्वयन में मैं पैरामीटर वस्तुओं deserialized की जरूरत नहीं है है, कि मैं बजाय XML के रूप में उन्हें करना चाहते हैं?

या, पैरामीटर के कच्चे एक्सएमएल का उपयोग करने के रूप में वे उन्हें वस्तुओं में deserializing WCF करने से पहले थे एक तरीका है? यदि मैं कम से कम वस्तुओं को deserializing समय खर्च करने से डब्ल्यूसीएफ को रोक नहीं सकता है, तो यह उन्हें वापस एक्सएमएल में पुन: स्थापित करने की लागत से बच जाएगा।

+0

मुझे अभी भी लगता होगा यह वास्तव में परेशानी के लायक है, यही कारण है कि serailization और deserilazation तेजी लाने के लिए नहीं। –

+0

@ सुरजीतसम मैं आपकी टिप्पणी को समझ नहीं पा रहा हूं। क्या आप कह रहे हैं कि डब्ल्यूसीएफ परेशानी के लायक नहीं है, या कच्चे एक्सएमएल तक पहुंचने में मेरी दिलचस्पी परेशानी के लायक नहीं है? अनावश्यक दौर यात्रा से बचने के अलावा, मैं serialization या deserialization तेज करने के बारे में कुछ भी नहीं कर सकता। – dthorpe

+0

क्षमा करें मैं अपनी टिप्पणी में स्पष्ट नहीं था, वास्तव में मेरा मतलब है कि कच्चे एक्सएमएल तक पहुंच परेशानी के लायक है? डब्ल्यूसीएफ हर परेशानी का अच्छा मूल्य है :), मैंने हाल ही में डब्ल्यूसीएफ में 10 साल पुरानी .NET रिमोटिंग विघटित प्रणाली में माइग्रेट किया है, हर चीज को तेज करने के लिए भारी कस्टम सीरियलाइजेशन/deserialization है, अगर आप किसी प्रकार के इंजेक्शन का उपयोग करते हैं जैसे कि एक marc_s ने कहा उत्तर तो आप पाएंगे कि कितनी देर तक सब कुछ लेता है, मेरे मामले में मैं खुश था कि deserialization केवल <30 एमएस लिया। –

उत्तर

3

ऐसा करने का एक तरीका message inspector बनाना होगा जो सर्वर पर आने वाले संदेश का निरीक्षण करेगा, और उस पर कार्य करेगा (उदा। इसे दूर या कुछ संग्रहीत करना)।

पाब्लो Pialorsi एक great blog post on how to write a message inspector है, कदम-दर-कदम

संदेश निरीक्षण आप कच्चे सोप संदेश स्वरूप में पैरामीटर के लिए पहुँच देना होगा।

मैंने सोचा कि शायद एक पैरामीटर इंस्पेक्टर बेहतर विकल्प हो सकता है, लेकिन ऐसा लगता है कि इन निरीक्षकों को केवल किसी भी सेवा कॉल के पैरामीटर पर जाना होगा, जब उन पैरामीटरों को पहले से ही ऑब्जेक्ट्स में deserialized किया गया है, तो यह नहीं है एक व्यवहार्य दृष्टिकोण की तरह ध्वनि ....

+0

दिलचस्प।जांच करेंगे, धन्यवाद। – dthorpe

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