2010-08-16 24 views
5

पर डब्ल्यूसीएफ संदेश आकार का निर्धारण कैसे करें मैं एक कस्टम एन्कोडर बना रहा हूं जो डब्ल्यूसीएफ प्रतिक्रियाओं को संपीड़ित करता है। यह माइक्रोसॉफ्ट के WCF नमूनों में Gzip एनकोडर और इस ब्लॉग पोस्ट पर आधारित है:एन्कोडर स्तर

http://frenk.wordpress.com/2009/12/04/gzip-compression-wcfsilverlight/

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

मुझे एनकोडर फैक्ट्री में WriteMessage (...) विधि दोनों पर संदेश का आकार प्राप्त करने की आवश्यकता होगी, इसलिए मुझे पता है कि संदेश को संपीड़ित करना है या DispatchMessageInspector में पहले सेन्ड्रिप्ली (...) विधि पर मैं प्रतिक्रिया में "gzip" ContentEncoding शीर्षलेख जोड़ सकता हूं। अनुरोध हमेशा छोटे होते हैं और संपीड़ित नहीं होते हैं, इसलिए मुझे इसके बारे में चिंता करने की आवश्यकता नहीं है।

किसी भी मदद की सराहना की।

जॉन।

उत्तर

0

आप मुझे लगता है कि आप दो चरणों में यह करना होगा यह reply.ToString.Length() और message.ToString.Length()

+0

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

2

के आधार पर की गणना कर सकते हैं। सबसे पहले, एक कस्टम MessageEncoder लिखें जो संदेश को byte[] पर सामान्य रूप से सामान्य करता है। एक बार आपके पास एन्कोडेड बाइट-सरणी हो (और यह कोई संदेश एन्कोडिंग प्रारूप हो सकता है ... एक्सएमएल, जेसन, बाइनरी, जो भी हो) आप बाइट-सरणी आकार की जांच कर सकते हैं और यह निर्धारित कर सकते हैं कि आप एक और संपीड़ित बाइट सरणी बनाना चाहते हैं या नहीं।

कई संसाधनों जो आपके लिए उपयोगी हो सकता है:

  • MSDN WCF Sample Code for a custom compression message encoder
  • Nicholas Allen's "Build a Custom Message Encoder" blog series। इस श्रृंखला में वह एक "गिनती एन्कोडर" बनाता है जो मूल रूप से किसी भी प्रकार के किसी अन्य एन्कोडर को लपेटता है और आपको यह जानने की अनुमति देता है कि एन्कोड किए गए संदेश का आकार क्या है (byte[] आकार के आधार पर)। आप शायद इसे अनुकूलित कर सकते हैं और "थ्रेसहोल्ड कॉम्प्रेसियन एन्कोडर" बना सकते हैं।